Пример #1
0
 public override void Visit(DbElementExpression expression)
 {
     Write(expression);
     _depth++;
     Write("Argument", expression.Argument);
     _depth--;
 }
        public override SqlFragment Visit(DbElementExpression expression)
        {
            SelectStatement s = VisitInputExpressionEnsureSelect(expression.Argument, null, null);

            s.Wrap(scope);
            return(s);
        }
Пример #3
0
        public override void Visit(DbElementExpression e)
        {
            Check.NotNull(e, "e");

            BeginUnary(e);
            End(e);
        }
Пример #4
0
        /// <summary>
        /// Implements the visitor pattern for <see cref="T:System.Data.Common.CommandTrees.DbElementExpression"/>.
        /// </summary>
        /// <param name="expression">The <see cref="T:System.Data.Common.CommandTrees.DbElementExpression"/> that is visited.</param>
        public override void Visit(DbElementExpression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            expression.Argument.Accept(this);
        }
Пример #5
0
        private DbExpression RewriteElementExpression(DbElementExpression expression)
        {
            DbExpression rewrittenInput = Rewrite(expression.Argument);

            if (!object.ReferenceEquals(expression.Argument, rewrittenInput))
            {
                expression = rewrittenInput.Element();
            }
            return(expression);
        }
        private DbExpression RewriteElementExpression(DbElementExpression expression)
        {
            DbExpression dbExpression = this.Rewrite(expression.Argument);

            if (!object.ReferenceEquals((object)expression.Argument, (object)dbExpression))
            {
                expression = dbExpression.Element();
            }
            return((DbExpression)expression);
        }
Пример #7
0
        /// <summary>
        /// Translate a NewInstance(Element(X)) expression into
        ///   "select top(1) * from X"
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        private ISqlFragment VisitCollectionConstructor(DbNewInstanceExpression e)
        {
            Debug.Assert(e.Arguments.Count <= 1);

            if (e.Arguments.Count == 1 && e.Arguments[0].ExpressionKind == DbExpressionKind.Element)
            {
                DbElementExpression elementExpr = e.Arguments[0] as DbElementExpression;
                SqlSelectStatement  result      = VisitExpressionEnsureSqlStatement(elementExpr.Argument);

                if (!IsCompatible(result, DbExpressionKind.Element))
                {
                    Symbol    fromSymbol;
                    TypeUsage inputType = MetadataHelpers.GetElementTypeUsage(elementExpr.Argument.ResultType);

                    result = CreateNewSelectStatement(result, "element", inputType, out fromSymbol);
                    AddFromSymbol(result, "element", fromSymbol, false);
                }
                result.Top.SetTopCount(1);
                return(result);
            }


            // Otherwise simply build this out as a union-all ladder
            CollectionType collectionType = MetadataHelpers.GetEdmType <CollectionType>(e.ResultType);

            Debug.Assert(collectionType != null);
            bool isScalarElement = MetadataHelpers.IsPrimitiveType(collectionType.TypeUsage);

            SqlBuilder resultSql = new SqlBuilder();
            string     separator = "";

            // handle empty table
            if (e.Arguments.Count == 0)
            {
                Debug.Assert(isScalarElement);
                resultSql.Append(" select cast(null as ");
                resultSql.Append(MetadataHelpers.GetSqlPrimitiveType(collectionType.TypeUsage));
                resultSql.Append(") as x from (select 1) as y where 1=0");
            }

            foreach (DbExpression arg in e.Arguments)
            {
                resultSql.Append(separator);
                resultSql.Append(" select ");
                resultSql.Append(arg.Accept(this));
                // For scalar elements, no alias is appended yet. Add this.
                if (isScalarElement)
                {
                    resultSql.Append(" as x ");
                }
                separator = " union all ";
            }

            return(resultSql);
        }
Пример #8
0
        public override Expression Visit(DbElementExpression expression)
        {
            Expression source = this.Visit(expression.Argument);
            Expression single = queryMethodExpressionBuilder.FirstOrDefault(source);

            var props = single.Type.GetProperties();

            if (props.Length == 1)
            {
                // If the row record has a single property, it is evaluated too
                return(Expression.Property(single, props[0]));
            }

            return(single);
        }
        public override Expression Visit(DbElementExpression expression)
        {
            Expression source = this.Visit(expression.Argument);
            Expression single = queryMethodExpressionBuilder.FirstOrDefault(source);

            var props = single.Type.GetProperties();

            if (props.Length == 1)
            {
                // If the row record has a single property, it is evaluated too
                return Expression.Property(single, props[0]);
            }

            return single;
        }
Пример #10
0
 public override void Visit(DbElementExpression expression)
 {
     VisitUnaryExpression(expression);
 }
		public override void Visit(DbElementExpression expression)
		{
			throw new NotSupportedException("Visit(\"ElementExpression\") is not supported.");
		}
Пример #12
0
 private DbExpression RewriteElementExpression(DbElementExpression expression)
 {
     DbExpression rewrittenInput = Rewrite(expression.Argument);
     if (!object.ReferenceEquals(expression.Argument, rewrittenInput))
     {
         expression = rewrittenInput.Element();
     }
     return expression;
 }
Пример #13
0
 public override void Visit(DbElementExpression expression)
 {
     throw new NotSupportedException("Visit(\"DbElementExpression\") is not supported.");
 }
 public override DbExpression Visit(DbElementExpression expression)
 {
     System.Diagnostics.Debug.Print("Visit(DbElementExpression): {0}", expression);
     return base.Visit(expression);
 }
Пример #15
0
 public override bool Visit(DbElementExpression expression)
 {
     Check.NotNull <DbElementExpression>(expression, nameof(expression));
     return(this.VisitUnaryExpression((DbUnaryExpression)expression));
 }
        /// <summary>
        ///     Visitor pattern method for <see cref="DbElementExpression" />.
        /// </summary>
        /// <param name="expression"> The DbElementExpression that is being visited. </param>
        /// <exception cref="ArgumentNullException">
        ///     <paramref name="expression" />
        ///     is null
        /// </exception>
        public override void Visit(DbElementExpression expression)
        {
            Check.NotNull(expression, "expression");

            VisitUnaryExpression(expression);
        }
Пример #17
0
 public override void Visit(DbElementExpression expression)
 {
     this.VisitUnaryExpression((DbUnaryExpression)expression);
 }
Пример #18
0
 public override void Visit(DbElementExpression e)
 {
     Check.NotNull <DbElementExpression>(e, nameof(e));
     this.VisitUnary((DbUnaryExpression)e);
 }
 public override void Visit(DbElementExpression expression) { }
Пример #20
0
 public override void Visit(DbElementExpression e)
 {
     VisitUnary(e);
 }
Пример #21
0
 public override TreeNode Visit(DbElementExpression e)
 {
     return(this.VisitUnary(e, true));
 }
Пример #22
0
 /// <summary>
 ///     Typed visitor pattern method for DbElementExpression.
 /// </summary>
 /// <param name="expression"> The DbElementExpression that is being visited. </param>
 /// <returns> An instance of TResultType. </returns>
 public abstract TResultType Visit(DbElementExpression expression);
Пример #23
0
 /// <summary>
 ///     Visitor pattern method for DbElementExpression.
 /// </summary>
 /// <param name="expression"> The DbElementExpression that is being visited. </param>
 public abstract void Visit(DbElementExpression expression);
Пример #24
0
 public override VfpExpression Visit(DbElementExpression expression)
 {
     return(new VfpElementExpression(expression.ResultType, expression.Argument.Accept(this)));
 }
Пример #25
0
 public override DbExpression Visit(DbElementExpression expression)
 {
     System.Diagnostics.Debug.Print("Visit(DbElementExpression): {0}", expression);
     return(base.Visit(expression));
 }
Пример #26
0
            public override DbExpressionEntitySetInfo Visit(DbElementExpression expression)
            {
                Check.NotNull(expression, "expression");

                return(null);
            }
Пример #27
0
 public override object Visit(DbElementExpression expression)
 {
     this.Visit(expression.Argument);
     return(null);
 }
Пример #28
0
 /// <summary>
 ///     Visitor pattern method for DbElementExpression.
 /// </summary>
 /// <param name="expression"> The DbElementExpression that is being visited. </param>
 public abstract void Visit(DbElementExpression expression);
Пример #29
0
        public override LegacyCommandTrees.DbExpression Visit(DbElementExpression expression)
        {
            Debug.Assert(expression != null, "expression != null");

            return(expression.Argument.Accept(this).Element());
        }
 public override void Visit(DbElementExpression e)
 {
     BeginUnary(e);
     End(e);
 }
Пример #31
0
 public override SqlFragment Visit(DbElementExpression expression)
 {
     throw new NotImplementedException();
 }
Пример #32
0
 public override ISqlFragment Visit(DbElementExpression e)
 {
     // ISSUE: What happens if the DbElementExpression is used as an input expression?
     // i.e. adding the '('  might not be right in all cases.
     return(new SqlBuilder("(", VisitExpressionEnsureSqlStatement(e.Argument), ")"));
 }
Пример #33
0
 public override TreeNode Visit(DbElementExpression e)
 {
     Check.NotNull <DbElementExpression>(e, nameof(e));
     return(this.VisitUnary((DbUnaryExpression)e, true));
 }
Пример #34
0
 public override void Visit(DbElementExpression expression)
 {
   VisitUnaryExpression(expression);
 }
Пример #35
0
 public override void Visit(DbElementExpression e)
 {
     VisitUnary(e);
 }
Пример #36
0
 public override bool Visit(DbElementExpression expression)
 {
     return(VisitUnaryExpression(expression));
 }
        public override void Visit(DbElementExpression e)
        {
            Check.NotNull(e, "e");

            VisitUnary(e);
        }
Пример #38
0
 public override TReturn Visit(DbElementExpression expression)
 {
     Check.NotNull <DbElementExpression>(expression, nameof(expression));
     throw this.ConstructNotSupportedException((DbExpression)expression);
 }
 public override SqlFragment Visit(DbElementExpression expression)
 {
     SelectStatement s = VisitInputExpressionEnsureSelect(expression.Argument, null, null);
     s.Wrap(scope);
     return s;
 }
 public override TReturn Visit(DbElementExpression expression)
 {
     throw ConstructNotSupportedException(expression);
 }
Пример #41
0
            public override TreeNode Visit(DbElementExpression e)
            {
                Check.NotNull(e, "e");

                return(VisitUnary(e, true));
            }
Пример #42
0
 public override void Visit(DbElementExpression expression)
 {
     Contract.Requires(expression != null);
 }
Пример #43
0
 public override DbExpressionEntitySetInfo Visit(DbElementExpression expression)
 {
     return(null);
 }
Пример #44
0
        /// <summary>
        /// Implements the visitor pattern for <see cref="T:System.Data.Common.CommandTrees.DbElementExpression"/>.
        /// </summary>
        /// <param name="expression">The <see cref="T:System.Data.Common.CommandTrees.DbElementExpression"/> that is visited.</param>
        public override void Visit(DbElementExpression expression)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }

            expression.Argument.Accept(this);
        }