public override AlgebraNode VisitJoinAlgebraNode(JoinAlgebraNode node)
        {
            base.VisitJoinAlgebraNode(node);

            if (node.Op == JoinAlgebraNode.JoinOperator.FullOuterJoin)
            {
                // TODO: Check if we could represent this join condition by an hash match operator

                JoinAlgebraNode leftOuterJoinNode = new JoinAlgebraNode();
                leftOuterJoinNode.Op         = JoinAlgebraNode.JoinOperator.LeftOuterJoin;
                leftOuterJoinNode.Predicate  = (ExpressionNode)node.Predicate.Clone();
                leftOuterJoinNode.Left       = (AlgebraNode)node.Left.Clone();
                leftOuterJoinNode.Right      = (AlgebraNode)node.Right.Clone();
                leftOuterJoinNode.OutputList = ArrayHelpers.Clone(node.OutputList);

                List <RowBufferEntry> swappedOutputList = new List <RowBufferEntry>();
                swappedOutputList.AddRange(node.Right.OutputList);
                swappedOutputList.AddRange(node.Left.OutputList);

                JoinAlgebraNode leftAntiSemiJoinNode = new JoinAlgebraNode();
                leftAntiSemiJoinNode.Op         = JoinAlgebraNode.JoinOperator.LeftAntiSemiJoin;
                leftAntiSemiJoinNode.Predicate  = (ExpressionNode)node.Predicate.Clone();
                leftAntiSemiJoinNode.Left       = (AlgebraNode)node.Right.Clone();
                leftAntiSemiJoinNode.Right      = (AlgebraNode)node.Left.Clone();
                leftAntiSemiJoinNode.OutputList = swappedOutputList.ToArray();

                List <ComputedValueDefinition> computeScalareDefinedValues = new List <ComputedValueDefinition>();
                foreach (RowBufferEntry rowBufferEntry in node.Left.OutputList)
                {
                    ComputedValueDefinition definedValue = new ComputedValueDefinition();
                    definedValue.Target     = rowBufferEntry;
                    definedValue.Expression = LiteralExpression.FromTypedNull(rowBufferEntry.DataType);
                    computeScalareDefinedValues.Add(definedValue);
                }

                ComputeScalarAlgebraNode computeScalarNode = new ComputeScalarAlgebraNode();
                computeScalarNode.Input         = leftAntiSemiJoinNode;
                computeScalarNode.DefinedValues = computeScalareDefinedValues.ToArray();
                computeScalarNode.OutputList    = swappedOutputList.ToArray();

                List <UnitedValueDefinition> concatDefinedValues = new List <UnitedValueDefinition>();
                for (int i = 0; i < node.OutputList.Length; i++)
                {
                    RowBufferEntry        rowBufferEntry     = node.OutputList[i];
                    UnitedValueDefinition concatDefinedValue = new UnitedValueDefinition();
                    concatDefinedValue.Target           = rowBufferEntry;
                    concatDefinedValue.DependendEntries = new RowBufferEntry[] { node.OutputList[i], node.OutputList[i] };
                    concatDefinedValues.Add(concatDefinedValue);
                }

                ConcatAlgebraNode concatenationNode = new ConcatAlgebraNode();
                concatenationNode.Inputs        = new AlgebraNode[] { leftOuterJoinNode, computeScalarNode };
                concatenationNode.DefinedValues = concatDefinedValues.ToArray();
                concatenationNode.OutputList    = swappedOutputList.ToArray();

                return(concatenationNode);
            }

            return(node);
        }
Exemple #2
0
        /// <summary>
        /// Duplicate the asset.
        /// </summary>
        /// <returns>A new asset that contains a duplicate of all action maps and actions in the asset.</returns>
        /// <remarks>
        /// Unlike calling <see cref="UnityEngine.Object.Instantiate(UnityEngine.Object)"/>, cloning an asset will not
        /// duplicate data such as unique <see cref="InputActionMap.id">map IDs</see> and <see cref="InputAction.id">action
        /// IDs</see>.
        /// </remarks>
        public InputActionAsset Clone()
        {
            var clone = (InputActionAsset)CreateInstance(GetType());

            clone.m_ActionMaps = ArrayHelpers.Clone(m_ActionMaps);
            return(clone);
        }
Exemple #3
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            NullScanAlgebraNode result = new NullScanAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            return(result);
        }
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            UnitedValueDefinition result = new UnitedValueDefinition();

            result.Target           = Target;
            result.DependendEntries = ArrayHelpers.Clone(_dependendEntries);
            return(result);
        }
Exemple #5
0
        public InputActionAsset Clone()
        {
            // Can't MemberwiseClone() ScriptableObject. Unfortunatly, Unity doesn't
            // prevent the call. Result will be a duplicate wrapper object, though.
            var clone = (InputActionAsset)CreateInstance(GetType());

            clone.m_ActionSets = ArrayHelpers.Clone(m_ActionSets);
            return(clone);
        }
Exemple #6
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            ConstantScanAlgebraNode result = new ConstantScanAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.DefinedValues      = ArrayHelpers.CreateDeepCopyOfAstElementArray(_definedValues, alreadyClonedElements);
            return(result);
        }
        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);
        }
Exemple #8
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            StackedTableSpoolAlgebraNode result = new StackedTableSpoolAlgebraNode();

            alreadyClonedElements.Add(this, result);
            result.StatisticsIterator = StatisticsIterator;
            result.Input      = (AlgebraNode)Input.Clone(alreadyClonedElements);
            result.OutputList = ArrayHelpers.Clone(OutputList);
            return(result);
        }
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            ResultAlgebraNode result = new ResultAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.Input       = (AlgebraNode)Input.Clone(alreadyClonedElements);
            result.ColumnNames = ArrayHelpers.Clone(_columnNames);
            return(result);
        }
Exemple #10
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            StackedTableSpoolRefAlgebraNode result = new StackedTableSpoolRefAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.DefinedValues      = ArrayHelpers.Clone(_definedValues);
            result.PrimarySpool       = (StackedTableSpoolAlgebraNode)alreadyClonedElements[_primarySpool];
            return(result);
        }
Exemple #11
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            AggregateAlgebraNode result = new AggregateAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.Input         = (AlgebraNode)Input.Clone(alreadyClonedElements);
            result.Groups        = ArrayHelpers.Clone(_groups);
            result.DefinedValues = ArrayHelpers.CreateDeepCopyOfAstElementArray(_definedValues, alreadyClonedElements);
            return(result);
        }
Exemple #12
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            TopAlgebraNode result = new TopAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.Input      = (AlgebraNode)Input.Clone(alreadyClonedElements);
            result.Limit      = _limit;
            result.TieEntries = ArrayHelpers.Clone(_tieEntries);
            return(result);
        }
        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);
        }
Exemple #14
0
        public override AstElement Clone(Dictionary <AstElement, AstElement> alreadyClonedElements)
        {
            SortAlgebraNode result = new SortAlgebraNode();

            result.StatisticsIterator = StatisticsIterator;
            result.OutputList         = ArrayHelpers.Clone(OutputList);
            result.Input       = (AlgebraNode)Input.Clone(alreadyClonedElements);
            result.Distinct    = _distinct;
            result.SortEntries = ArrayHelpers.Clone(_sortEntries);
            result.SortOrders  = ArrayHelpers.Clone(_sortOrders);
            return(result);
        }
Exemple #15
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);
        }
Exemple #16
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);
        }
Exemple #17
0
        ////REVIEW: right now the Clone() methods aren't overridable; do we want that?
        public InputActionSet Clone()
        {
            // Internal action sets from singleton actions should not be visible outside of
            // them. Cloning them is not allowed.
            if (m_SingletonAction != null)
            {
                throw new InvalidOperationException(
                          string.Format("Cloning internal set of singleton action '{0}' is not allowed", m_SingletonAction));
            }

            var clone = new InputActionSet
            {
                m_Name    = m_Name,
                m_Actions = ArrayHelpers.Clone(m_Actions)
            };

            return(clone);
        }
Exemple #18
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);
        }