public override void Deserialize(IntermediateFormatReader reader)
        {
            base.Deserialize(reader);
            reader.RegisterDeclaration(m_declaration);
            while (reader.NextMember())
            {
                switch (reader.CurrentMember.MemberName)
                {
                case MemberName.Grouping:
                    m_grouping = (RuntimeGroupingObj)reader.ReadRIFObject();
                    if (m_grouping != null)
                    {
                        m_grouping.SetOwner(this);
                    }
                    break;

                case MemberName.Expression:
                    m_expression = (RuntimeExpressionInfo)reader.ReadRIFObject();
                    break;

                case MemberName.HierarchyRoot:
                    m_hierarchyRoot = (RuntimeHierarchyObjReference)reader.ReadRIFObject();
                    break;

                case MemberName.HierarchyObjs:
                    m_hierarchyObjs = reader.ReadListOfRIFObjects <List <IReference <RuntimeHierarchyObj> > >();
                    break;

                default:
                    Global.Tracer.Assert(condition: false);
                    break;
                }
            }
        }
 private void ConstructorHelper(int exprIndex, RuntimeHierarchyObjReference hierarchyRoot)
 {
     m_hierarchyRoot = hierarchyRoot;
     using (m_hierarchyRoot.PinValue())
     {
         RuntimeGroupRootObj runtimeGroupRootObj = m_hierarchyRoot.Value() as RuntimeGroupRootObj;
         Global.Tracer.Assert(runtimeGroupRootObj != null, "(null != groupRoot)");
         List <Microsoft.ReportingServices.ReportIntermediateFormat.ExpressionInfo> list;
         IndexedExprHost expressionsHost;
         List <bool>     directions;
         if (ProcessingStages.Grouping == runtimeGroupRootObj.ProcessingStage)
         {
             list            = runtimeGroupRootObj.GroupExpressions;
             expressionsHost = runtimeGroupRootObj.GroupExpressionHost;
             directions      = runtimeGroupRootObj.GroupDirections;
         }
         else
         {
             Global.Tracer.Assert(ProcessingStages.SortAndFilter == runtimeGroupRootObj.ProcessingStage, "(ProcessingStages.SortAndFilter == groupRoot.ProcessingStage)");
             list            = runtimeGroupRootObj.SortExpressions;
             expressionsHost = runtimeGroupRootObj.SortExpressionHost;
             directions      = runtimeGroupRootObj.SortDirections;
         }
         if (exprIndex == -1 || exprIndex >= list.Count)
         {
             m_hierarchyObjs = new List <IReference <RuntimeHierarchyObj> >();
             RuntimeGroupLeafObjReference runtimeGroupLeafObjReference = null;
             _ = m_odpContext.TablixProcessingScalabilityCache;
             if (ProcessingStages.Grouping == runtimeGroupRootObj.ProcessingStage)
             {
                 runtimeGroupLeafObjReference = runtimeGroupRootObj.CreateGroupLeaf();
                 if (!runtimeGroupRootObj.HasParent)
                 {
                     runtimeGroupRootObj.AddChildWithNoParent(runtimeGroupLeafObjReference);
                 }
             }
             if (null != runtimeGroupLeafObjReference)
             {
                 m_hierarchyObjs.Add(runtimeGroupLeafObjReference);
             }
         }
         else
         {
             m_expression = new RuntimeExpressionInfo(list, expressionsHost, directions, exprIndex);
             m_grouping   = RuntimeGroupingObj.CreateGroupingObj(runtimeGroupRootObj.GroupingType, this, m_objectType);
         }
     }
 }
예제 #3
0
        protected RuntimeHierarchyObjReference CreateHierarchyObjAndAddToParent()
        {
            RuntimeHierarchyObjReference runtimeHierarchyObjReference = null;

            try
            {
                RuntimeHierarchyObj runtimeHierarchyObj = new RuntimeHierarchyObj(base.m_owner, base.m_objectType, ((IScope)base.m_owner).Depth + 1);
                runtimeHierarchyObjReference = (RuntimeHierarchyObjReference)runtimeHierarchyObj.SelfReference;
                runtimeHierarchyObj.NextRow();
                return(runtimeHierarchyObjReference);
            }
            finally
            {
                if ((BaseReference)null != (object)runtimeHierarchyObjReference)
                {
                    runtimeHierarchyObjReference.UnPinValue();
                }
            }
        }