private static void AddAllEntry(BitVec opVector, OpType opType) { foreach (PlanCompilerPhase phase in s_PlanCompilerPhases) { AddSingleEntry(opVector, opType, phase); } }
private static void AddEntry(BitVec opVector, OpType opType, params PlanCompilerPhase[] phases) { foreach (PlanCompilerPhase phase in phases) { AddSingleEntry(opVector, opType, phase); } }
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]; } }
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]; } }
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; }
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]; } }
private static void AddAllEntry(BitVec opVector, OpType opType) { foreach (var phase in _planCompilerPhases) { AddSingleEntry(opVector, opType, phase); } }
private static void AddEntry(BitVec opVector, OpType opType, params PlanCompilerPhase[] phases) { foreach (var phase in phases) { AddSingleEntry(opVector, opType, phase); } }
private static void AddSingleEntry(BitVec opVector, OpType opType, PlanCompilerPhase phase) { var hash = ComputeHash(opType, phase); opVector.Set(hash); }
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]; } }
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); }
private static void AddSingleEntry(BitVec opVector, OpType opType, PlanCompilerPhase phase) { int hash = ComputeHash(opType, phase); opVector.Set(hash); }