Exemplo n.º 1
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            CaseExpression result = new CaseExpression();

            if (_inputExpression != null)
            {
                result.InputExpression = (ExpressionNode)_inputExpression.Clone(alreadyClonedElements);
            }

            if (_elseExpression != null)
            {
                result.ElseExpression = (ExpressionNode)_elseExpression.Clone(alreadyClonedElements);
            }

            result.WhenExpressions = new ExpressionNode[_whenExpressions.Length];
            for (int i = 0; i < _whenExpressions.Length; i++)
            {
                result.WhenExpressions[i] = (ExpressionNode)_whenExpressions[i].Clone(alreadyClonedElements);
            }

            result.ThenExpressions = new ExpressionNode[_thenExpressions.Length];
            for (int i = 0; i < _thenExpressions.Length; i++)
            {
                result.ThenExpressions[i] = (ExpressionNode)_thenExpressions[i].Clone(alreadyClonedElements);
            }

            result.ResultType = _resultType;

            return(result);
        }
Exemplo n.º 2
0
        public override ExpressionNode VisitCoalesceExpression(CoalesceExpression expression)
        {
            // First visit all expressions
            base.VisitCoalesceExpression(expression);

            // Since a COALESCE expression can be expressed using a CASE expression we convert
            // them to simplify the evaluation and optimization engine.
            //
            // COALESCE(expression1,...,expressionN) is equivalent to this CASE expression:
            //
            // CASE
            //   WHEN (expression1 IS NOT NULL) THEN expression1
            //   ...
            //   WHEN (expressionN IS NOT NULL) THEN expressionN
            // END

            CaseExpression caseExpression = new CaseExpression();

            caseExpression.WhenExpressions = new ExpressionNode[expression.Expressions.Length];
            caseExpression.ThenExpressions = new ExpressionNode[expression.Expressions.Length];

            for (int i = 0; i < expression.Expressions.Length; i++)
            {
                ExpressionNode whenPart = expression.Expressions[i];
                ExpressionNode thenPart = (ExpressionNode)whenPart.Clone();
                caseExpression.WhenExpressions[i] = new IsNullExpression(true, whenPart);
                caseExpression.ThenExpressions[i] = thenPart;
            }

            return(VisitExpression(caseExpression));
        }
Exemplo n.º 3
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            UnaryExpression result = new UnaryExpression(_op, (ExpressionNode)_operand.Clone(alreadyClonedElements));

            result.OperatorMethod = OperatorMethod;
            return(result);
        }
Exemplo n.º 4
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            OrderByColumn result = new OrderByColumn();

            result.Expression = (ExpressionNode)_expression.Clone(alreadyClonedElements);
            result.SortOrder  = _sortOrder;
            return(result);
        }
Exemplo n.º 5
0
 public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
 {
     return(new BetweenExpression(
                (ExpressionNode)_expression.Clone(alreadyClonedElements),
                (ExpressionNode)_lowerBound.Clone(alreadyClonedElements),
                (ExpressionNode)_upperBound.Clone(alreadyClonedElements)
                ));
 }
Exemplo n.º 6
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            ComputedValueDefinition result = new ComputedValueDefinition();

            result.Target     = Target;
            result.Expression = (ExpressionNode)_expression.Clone(alreadyClonedElements);
            return(result);
        }
Exemplo n.º 7
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            NullIfExpression result = new NullIfExpression();

            result.LeftExpression  = (ExpressionNode)_leftExpression.Clone(alreadyClonedElements);
            result.RightExpression = (ExpressionNode)_rightExpression.Clone(alreadyClonedElements);
            return(result);
        }
Exemplo n.º 8
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            CastExpression result = new CastExpression();

            result.Expression    = (ExpressionNode)_expression.Clone(alreadyClonedElements);
            result.TypeReference = (TypeReference)_typeReference.Clone(alreadyClonedElements);
            result.ConvertMethod = _convertMethod;
            return(result);
        }
Exemplo n.º 9
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            AggregatedValueDefinition result = new AggregatedValueDefinition();

            result.Target     = Target;
            result.Aggregate  = _aggregate;
            result.Aggregator = _aggregator;
            result.Argument   = (ExpressionNode)_argument.Clone(alreadyClonedElements);
            return(result);
        }
Exemplo n.º 10
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            FilterAlgebraNode result = new FilterAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.Input     = (AlgebraNode)Input.Clone(alreadyClonedElements);
            result.Predicate = (ExpressionNode)_predicate.Clone(alreadyClonedElements);
            return(result);
        }
Exemplo n.º 11
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            BinaryExpression result = new BinaryExpression();

            result.Op             = _op;
            result.Left           = (ExpressionNode)_left.Clone(alreadyClonedElements);
            result.Right          = (ExpressionNode)_right.Clone(alreadyClonedElements);
            result.OperatorMethod = OperatorMethod;
            return(result);
        }
Exemplo n.º 12
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            AllAnySubselect allAnySubselect = new AllAnySubselect();

            allAnySubselect.Left  = (ExpressionNode)_left.Clone(alreadyClonedElements);
            allAnySubselect.Op    = _op;
            allAnySubselect.Type  = _type;
            allAnySubselect.Query = (QueryNode)Query.Clone(alreadyClonedElements);
            return(allAnySubselect);
        }
Exemplo n.º 13
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            SelectColumn result = new SelectColumn();

            if (_expression != null)
            {
                result.Expression = (ExpressionNode)_expression.Clone(alreadyClonedElements);
            }
            result.Alias = _alias;
            return(result);
        }
Exemplo n.º 14
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            IndexSpoolAlgebraNode result = new IndexSpoolAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.Input           = (AlgebraNode)Input.Clone(alreadyClonedElements);
            result.IndexEntry      = _indexEntry;
            result.ProbeExpression = (ExpressionNode)_probeExpression.Clone(alreadyClonedElements);
            return(result);
        }
Exemplo n.º 15
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            PropertyAccessExpression result = new PropertyAccessExpression();

            result.Target          = (ExpressionNode)_target.Clone(alreadyClonedElements);
            result.Name            = _name;
            result.NameSourceRange = _nameSourceRange;
            result.Property        = _property;

            return(result);
        }
Exemplo n.º 16
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            InExpression result = new InExpression();

            result._left             = (ExpressionNode)_left.Clone(alreadyClonedElements);
            result._rightExpressions = new ExpressionNode[_rightExpressions.Length];

            for (int i = 0; i < _rightExpressions.Length; i++)
            {
                result._rightExpressions[i] = (ExpressionNode)_rightExpressions[i].Clone(alreadyClonedElements);
            }

            return(result);
        }
Exemplo n.º 17
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            HashMatchAlgebraNode result = new HashMatchAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.Left          = (AlgebraNode)_left.Clone(alreadyClonedElements);
            result.Right         = (AlgebraNode)_right.Clone(alreadyClonedElements);
            result.Op            = _op;
            result.BuildKeyEntry = _buildKeyEntry;
            result.ProbeEntry    = _probeEntry;
            result.ProbeResidual = (ExpressionNode)_probeResidual.Clone(alreadyClonedElements);
            return(result);
        }
Exemplo n.º 18
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            JoinedTableReference result = new JoinedTableReference();

            result.Left     = (TableReference)_left.Clone(alreadyClonedElements);
            result.JoinType = _joinType;
            result.Right    = (TableReference)_right.Clone(alreadyClonedElements);

            if (_condition != null)
            {
                result.Condition = (ExpressionNode)_condition.Clone(alreadyClonedElements);
            }

            return(result);
        }
Exemplo n.º 19
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            JoinAlgebraNode result = new JoinAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.Left  = (AlgebraNode)_left.Clone(alreadyClonedElements);
            result.Right = (AlgebraNode)_right.Clone(alreadyClonedElements);
            result.Op    = _op;
            if (_predicate != null)
            {
                result.Predicate = (ExpressionNode)_predicate.Clone(alreadyClonedElements);
            }
            result.OuterReferences = ArrayHelpers.Clone(_outerReferences);
            return(result);
        }
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            MethodInvocationExpression result = new MethodInvocationExpression();

            result.Target          = (ExpressionNode)_target.Clone(alreadyClonedElements);
            result.Name            = _name;
            result.NameSourceRange = _nameSourceRange;

            result._arguments = new ExpressionNode[_arguments.Length];
            for (int i = 0; i < _arguments.Length; i++)
            {
                result._arguments[i] = (ExpressionNode)_arguments[i].Clone(alreadyClonedElements);
            }

            result._method = _method;

            return(result);
        }
Exemplo n.º 21
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            SelectQuery result = new SelectQuery();

            result.IsDistinct = _isDistinct;

            if (_topClause != null)
            {
                result.TopClause = (TopClause)_topClause.Clone(alreadyClonedElements);
            }

            result.SelectColumns = ArrayHelpers.CreateDeepCopyOfAstElementArray(_selectColumns, alreadyClonedElements);

            if (_tableReferences != null)
            {
                result.TableReferences = (TableReference)_tableReferences.Clone(alreadyClonedElements);
            }

            if (_whereClause != null)
            {
                result.WhereClause = (ExpressionNode)_whereClause.Clone(alreadyClonedElements);
            }

            if (_groupByColumns != null)
            {
                result.GroupByColumns = ArrayHelpers.CreateDeepCopyOfAstElementArray(_groupByColumns, alreadyClonedElements);
            }

            if (_orderByColumns != null)
            {
                result.OrderByColumns = ArrayHelpers.CreateDeepCopyOfAstElementArray(_orderByColumns, alreadyClonedElements);
            }

            result.AggregateDependencies = ArrayHelpers.CreateDeepCopyOfAstElementArray(_aggregateDependencies, alreadyClonedElements);
            result.ColumnDependencies    = ArrayHelpers.Clone(_columnDependencies);

            return(result);
        }
Exemplo n.º 22
0
 public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
 {
     return(new IsNullExpression(_negated, (ExpressionNode)_expression.Clone(alreadyClonedElements)));
 }