コード例 #1
0
 private static void AddAllEntry(BitVec opVector, OpType opType)
 {
     foreach (PlanCompilerPhase phase in s_PlanCompilerPhases)
     {
         AddSingleEntry(opVector, opType, phase);
     }
 }
コード例 #2
0
 private static void AddEntry(BitVec opVector, OpType opType, params PlanCompilerPhase[] phases)
 {
     foreach (PlanCompilerPhase phase in phases)
     {
         AddSingleEntry(opVector, opType, phase);
     }
 }
コード例 #3
0
 internal void Minus(BitVec value)
 {
     Debug.Assert(m_length == value.m_length, "unequal sized bitvec");
     for (int i = 0; i < m_array.Length; i++)
     {
         m_array[i] &= ~value.m_array[i];
     }
 }
コード例 #4
0
 internal void Or(BitVec value)
 {
     Debug.Assert(m_length == value.m_length, "unequal sized bitvec");
     for (var i = 0; i < m_array.Length; i++)
     {
         m_array[i] |= value.m_array[i];
     }
 }
コード例 #5
0
        private static BitVec InitializeOpTypes()
        {
            var validOpTypes = new BitVec(((int)OpType.MaxMarker + 1) * ((int)PlanCompilerPhase.MaxMarker + 1));

            AddAllEntry(validOpTypes, OpType.Aggregate);
            AddAllEntry(validOpTypes, OpType.And);
            AddAllEntry(validOpTypes, OpType.Case);
            AddAllEntry(validOpTypes, OpType.Cast);
            AddEntry(
                validOpTypes, OpType.Collect,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE,
                PlanCompilerPhase.ProjectionPruning,
                PlanCompilerPhase.NestPullup);
            AddAllEntry(validOpTypes, OpType.Constant);
            AddAllEntry(validOpTypes, OpType.ConstantPredicate);
            AddAllEntry(validOpTypes, OpType.ConstrainedSort);
            AddAllEntry(validOpTypes, OpType.CrossApply);
            AddAllEntry(validOpTypes, OpType.CrossJoin);
            AddEntry(validOpTypes, OpType.Deref, PlanCompilerPhase.PreProcessor);
            AddAllEntry(validOpTypes, OpType.Distinct);
            AddAllEntry(validOpTypes, OpType.Divide);
            AddEntry(
                validOpTypes, OpType.Element,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.Transformations,
                PlanCompilerPhase.JoinElimination,
                PlanCompilerPhase.ProjectionPruning,
                PlanCompilerPhase.CodeGen,
                PlanCompilerPhase.PostCodeGen);
            AddAllEntry(validOpTypes, OpType.EQ);
            AddAllEntry(validOpTypes, OpType.Except);
            AddAllEntry(validOpTypes, OpType.Exists);
            AddAllEntry(validOpTypes, OpType.Filter);
            AddAllEntry(validOpTypes, OpType.FullOuterJoin);
            AddAllEntry(validOpTypes, OpType.Function);
            AddAllEntry(validOpTypes, OpType.GE);
            AddEntry(
                validOpTypes, OpType.GetEntityRef,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddEntry(
                validOpTypes, OpType.GetRefKey,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.GroupBy);
            AddEntry(
                validOpTypes, OpType.GroupByInto,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE,
                PlanCompilerPhase.ProjectionPruning,
                PlanCompilerPhase.NestPullup);
            AddAllEntry(validOpTypes, OpType.GT);
            AddAllEntry(validOpTypes, OpType.InnerJoin);
            AddAllEntry(validOpTypes, OpType.InternalConstant);
            AddAllEntry(validOpTypes, OpType.Intersect);
            AddAllEntry(validOpTypes, OpType.IsNull);
            AddEntry(
                validOpTypes, OpType.IsOf,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.LE);
            AddAllEntry(validOpTypes, OpType.LeftOuterJoin);
            AddAllEntry(validOpTypes, OpType.Like);
            AddAllEntry(validOpTypes, OpType.LT);
            AddAllEntry(validOpTypes, OpType.Minus);
            AddAllEntry(validOpTypes, OpType.Modulo);
            AddAllEntry(validOpTypes, OpType.Multiply);
            AddEntry(validOpTypes, OpType.Navigate, PlanCompilerPhase.PreProcessor);
            AddAllEntry(validOpTypes, OpType.NE);
            AddEntry(
                validOpTypes, OpType.NewEntity,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddEntry(
                validOpTypes, OpType.NewInstance,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddEntry(
                validOpTypes, OpType.DiscriminatedNewEntity,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddEntry(validOpTypes, OpType.NewMultiset, PlanCompilerPhase.PreProcessor);
            AddEntry(
                validOpTypes, OpType.NewRecord,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.Not);
            AddAllEntry(validOpTypes, OpType.Null);
            AddAllEntry(validOpTypes, OpType.NullSentinel);
            AddAllEntry(validOpTypes, OpType.Or);
            AddAllEntry(validOpTypes, OpType.OuterApply);
            AddAllEntry(validOpTypes, OpType.PhysicalProject);
            AddAllEntry(validOpTypes, OpType.Plus);
            AddAllEntry(validOpTypes, OpType.Project);
            // Since, we don't support UDTs anymore - we shouldn't see PropertyOp after this
            AddEntry(
                validOpTypes, OpType.Property,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddEntry(
                validOpTypes, OpType.Ref,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddEntry(
                validOpTypes, OpType.RelProperty,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.ScanTable);
            AddEntry(
                validOpTypes, OpType.ScanView,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.SingleRow);
            AddAllEntry(validOpTypes, OpType.SingleRowTable);
            AddAllEntry(validOpTypes, OpType.SoftCast);
            AddAllEntry(validOpTypes, OpType.Sort);
            AddEntry(
                validOpTypes, OpType.Treat,
                PlanCompilerPhase.PreProcessor,
                PlanCompilerPhase.AggregatePushdown,
                PlanCompilerPhase.Normalization,
                PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.UnaryMinus);
            AddAllEntry(validOpTypes, OpType.UnionAll);
            AddAllEntry(validOpTypes, OpType.Unnest);
            AddAllEntry(validOpTypes, OpType.VarDef);
            AddAllEntry(validOpTypes, OpType.VarDefList);
            AddAllEntry(validOpTypes, OpType.VarRef);

            return validOpTypes;
        }
コード例 #6
0
 internal void Minus(BitVec value)
 {
     Debug.Assert(m_length == value.m_length, "unequal sized bitvec");
     for (var i = 0; i < m_array.Length; i++)
     {
         m_array[i] &= ~value.m_array[i];
     }
 }
コード例 #7
0
 private static void AddAllEntry(BitVec opVector, OpType opType)
 {
     foreach (var phase in _planCompilerPhases)
     {
         AddSingleEntry(opVector, opType, phase);
     }
 }
コード例 #8
0
 private static void AddEntry(BitVec opVector, OpType opType, params PlanCompilerPhase[] phases)
 {
     foreach (var phase in phases)
     {
         AddSingleEntry(opVector, opType, phase);
     }
 }
コード例 #9
0
 private static void AddSingleEntry(BitVec opVector, OpType opType, PlanCompilerPhase phase)
 {
     var hash = ComputeHash(opType, phase);
     opVector.Set(hash);
 }
コード例 #10
0
 internal void Or(BitVec value)
 {
     Debug.Assert(m_length == value.m_length, "unequal sized bitvec");
     for (int i = 0; i < m_array.Length; i++)
     {
         m_array[i] |= value.m_array[i];
     }
 }
コード例 #11
0
        private static BitVec InitializeOpTypes()
        {
            BitVec validOpTypes = new BitVec(((int)OpType.MaxMarker + 1) * ((int)PlanCompilerPhase.MaxMarker + 1));

            AddAllEntry(validOpTypes, OpType.Aggregate);
            AddAllEntry(validOpTypes, OpType.And);
            AddAllEntry(validOpTypes, OpType.Case);
            AddAllEntry(validOpTypes, OpType.Cast);
            AddEntry(validOpTypes, OpType.Collect,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE,
                     PlanCompilerPhase.ProjectionPruning,
                     PlanCompilerPhase.NestPullup);
            AddAllEntry(validOpTypes, OpType.Constant);
            AddAllEntry(validOpTypes, OpType.ConstantPredicate);
            AddAllEntry(validOpTypes, OpType.ConstrainedSort);
            AddAllEntry(validOpTypes, OpType.CrossApply);
            AddAllEntry(validOpTypes, OpType.CrossJoin);
            AddEntry(validOpTypes, OpType.Deref, PlanCompilerPhase.PreProcessor);
            AddAllEntry(validOpTypes, OpType.Distinct);
            AddAllEntry(validOpTypes, OpType.Divide);
            AddEntry(validOpTypes, OpType.Element,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.Transformations,
                     PlanCompilerPhase.JoinElimination,
                     PlanCompilerPhase.ProjectionPruning,
                     PlanCompilerPhase.CodeGen,
                     PlanCompilerPhase.PostCodeGen);
            AddAllEntry(validOpTypes, OpType.EQ);
            AddAllEntry(validOpTypes, OpType.Except);
            AddAllEntry(validOpTypes, OpType.Exists);
            AddAllEntry(validOpTypes, OpType.Filter);
            AddAllEntry(validOpTypes, OpType.FullOuterJoin);
            AddAllEntry(validOpTypes, OpType.Function);
            AddAllEntry(validOpTypes, OpType.GE);
            AddEntry(validOpTypes, OpType.GetEntityRef,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddEntry(validOpTypes, OpType.GetRefKey,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.GroupBy);
            AddEntry(validOpTypes, OpType.GroupByInto,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE,
                     PlanCompilerPhase.ProjectionPruning,
                     PlanCompilerPhase.NestPullup);
            AddAllEntry(validOpTypes, OpType.GT);
            AddAllEntry(validOpTypes, OpType.InnerJoin);
            AddAllEntry(validOpTypes, OpType.InternalConstant);
            AddAllEntry(validOpTypes, OpType.Intersect);
            AddAllEntry(validOpTypes, OpType.IsNull);
            AddEntry(validOpTypes, OpType.IsOf,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.LE);
            AddAllEntry(validOpTypes, OpType.LeftOuterJoin);
            AddAllEntry(validOpTypes, OpType.Like);
            AddAllEntry(validOpTypes, OpType.LT);
            AddAllEntry(validOpTypes, OpType.Minus);
            AddAllEntry(validOpTypes, OpType.Modulo);
            AddAllEntry(validOpTypes, OpType.Multiply);
            AddEntry(validOpTypes, OpType.Navigate, PlanCompilerPhase.PreProcessor);
            AddAllEntry(validOpTypes, OpType.NE);
            AddEntry(validOpTypes, OpType.NewEntity,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddEntry(validOpTypes, OpType.NewInstance,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddEntry(validOpTypes, OpType.DiscriminatedNewEntity,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddEntry(validOpTypes, OpType.NewMultiset, PlanCompilerPhase.PreProcessor);
            AddEntry(validOpTypes, OpType.NewRecord,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.Not);
            AddAllEntry(validOpTypes, OpType.Null);
            AddAllEntry(validOpTypes, OpType.NullSentinel);
            AddAllEntry(validOpTypes, OpType.Or);
            AddAllEntry(validOpTypes, OpType.OuterApply);
            AddAllEntry(validOpTypes, OpType.PhysicalProject);
            AddAllEntry(validOpTypes, OpType.Plus);
            AddAllEntry(validOpTypes, OpType.Project);
            // Since, we don't support UDTs anymore - we shouldn't see PropertyOp after this
            AddEntry(validOpTypes, OpType.Property,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddEntry(validOpTypes, OpType.Ref,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddEntry(validOpTypes, OpType.RelProperty,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.ScanTable);
            AddEntry(validOpTypes, OpType.ScanView,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.SingleRow);
            AddAllEntry(validOpTypes, OpType.SingleRowTable);
            AddAllEntry(validOpTypes, OpType.SoftCast);
            AddAllEntry(validOpTypes, OpType.Sort);
            AddEntry(validOpTypes, OpType.Treat,
                     PlanCompilerPhase.PreProcessor,
                     PlanCompilerPhase.AggregatePushdown,
                     PlanCompilerPhase.Normalization,
                     PlanCompilerPhase.NTE);
            AddAllEntry(validOpTypes, OpType.UnaryMinus);
            AddAllEntry(validOpTypes, OpType.UnionAll);
            AddAllEntry(validOpTypes, OpType.Unnest);
            AddAllEntry(validOpTypes, OpType.VarDef);
            AddAllEntry(validOpTypes, OpType.VarDefList);
            AddAllEntry(validOpTypes, OpType.VarRef);

            return(validOpTypes);
        }
コード例 #12
0
        private static void AddSingleEntry(BitVec opVector, OpType opType, PlanCompilerPhase phase)
        {
            int hash = ComputeHash(opType, phase);

            opVector.Set(hash);
        }