internal static void TraceReportInstance(OnDemandMetadata odpMetadata, ReportInstance reportInstance, Report reportDefinition, int level) { if (!Global.Tracer.TraceVerbose || reportInstance == null) { return; } if (odpMetadata != null) { TraceMetadata(odpMetadata, level); } Global.Tracer.Trace("{0}Report: NoRows={1}, Language={2}, Variables={3}", GetEmptyString(level), reportInstance.NoRows, reportInstance.Language, FlattenObjectArray(reportInstance.VariableValues)); if (odpMetadata == null && reportDefinition != null && reportDefinition.MappingDataSetIndexToDataSet.Count > 0) { Global.Tracer.Trace("{0}{1} DataSetInstances: ", GetEmptyString(level), reportDefinition.MappingDataSetIndexToDataSet.Count); IEnumerator cachedDataSetInstances = reportInstance.GetCachedDataSetInstances(); while (cachedDataSetInstances.MoveNext()) { DataSetInstance dataSetInstance = (DataSetInstance)cachedDataSetInstances.Current; if (dataSetInstance != null) { TraceDataSetInstance(dataSetInstance, level + 1); } } } TraceScopeInstance(reportInstance, level); }
internal override bool CalculateAggregate(string aggregateName) { OnDemandProcessingContext odpWorkerContextForTablixProcessing = GetOdpWorkerContextForTablixProcessing(); odpWorkerContextForTablixProcessing.ReportAggregates.TryGetValue(aggregateName, out Microsoft.ReportingServices.ReportIntermediateFormat.DataAggregateInfo value); if (value == null) { return(false); } Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataSet = m_odpContext.ReportDefinition.MappingDataSetIndexToDataSet[value.DataSetIndexInCollection]; Microsoft.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance = odpWorkerContextForTablixProcessing.GetDataSetInstance(dataSet); if (dataSetInstance != null) { bool flag = odpWorkerContextForTablixProcessing.IsTablixProcessingComplete(dataSet.IndexInCollection); if (!flag) { if (odpWorkerContextForTablixProcessing.IsTablixProcessingMode) { return(false); } ((OnDemandStateManagerFull)odpWorkerContextForTablixProcessing.StateManager).PerformOnDemandTablixProcessingWithContextRestore(dataSet); } if (flag || m_odpContext.IsPageHeaderFooter) { dataSetInstance.SetupDataSetLevelAggregates(m_odpContext); } return(true); } return(false); }
internal void SetupFields(OnDemandProcessingContext odpContext, DataSetInstance dataSetInstance) { if (!dataSetInstance.NoRows) { if (0 < m_firstRowOffset) { odpContext.ReportObjectModel.RegisterOnDemandFieldValueUpdate(m_firstRowOffset, dataSetInstance, odpContext.GetDataChunkReader(dataSetInstance.DataSetDef.IndexInCollection)); } else { odpContext.ReportObjectModel.ResetFieldValues(); } } }
internal void PopulateExtendedFieldsProperties(DataSetInstance dataSetInstance) { if (dataSetInstance.FieldInfos == null) { return; } int num = dataSetInstance.FieldInfos.Length; m_fieldPropertyNames = new RecordSetPropertyNamesList(num); for (int i = 0; i < num; i++) { FieldInfo fieldInfo = dataSetInstance.FieldInfos[i]; RecordSetPropertyNames recordSetPropertyNames = null; if (fieldInfo != null && fieldInfo.PropertyCount != 0) { recordSetPropertyNames = new RecordSetPropertyNames(); recordSetPropertyNames.PropertyNames = new List <string>(fieldInfo.PropertyCount); recordSetPropertyNames.PropertyNames.AddRange(fieldInfo.PropertyNames); } m_fieldPropertyNames.Add(recordSetPropertyNames); } }
internal override bool PrepareFieldsCollectionForDirectFields() { if (m_odpContext.IsPageHeaderFooter && m_odpContext.ReportDefinition.DataSetsNotOnlyUsedInParameters == 1) { OnDemandProcessingContext parentContext = m_odpContext.ParentContext; Microsoft.ReportingServices.ReportIntermediateFormat.DataSet firstDataSet = m_odpContext.ReportDefinition.FirstDataSet; Microsoft.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance = parentContext.GetDataSetInstance(firstDataSet); if (dataSetInstance != null) { if (!parentContext.IsTablixProcessingComplete(firstDataSet.IndexInCollection)) { ((OnDemandStateManagerFull)parentContext.StateManager).PerformOnDemandTablixProcessing(firstDataSet); } if (!dataSetInstance.NoRows) { dataSetInstance.SetupEnvironment(m_odpContext, newDataSetDefinition: false); parentContext.GetDataChunkReader(firstDataSet.IndexInCollection).ResetCachedStreamOffset(); return(true); } } } return(false); }
internal void InitializeFromSnapshot(OnDemandProcessingContext odpContext) { if (!odpContext.ReprocessSnapshot) { int num = 0; if (m_dataSetInstances == null && odpContext.ReportDefinition.MappingNameToDataSet != null) { num = odpContext.ReportDefinition.MappingNameToDataSet.Count; } m_dataSetInstances = new DataSetInstance[num]; } Report reportDefinition = odpContext.ReportDefinition; m_noRows = (reportDefinition.DataSetsNotOnlyUsedInParameters > 0); List <DataSource> dataSources = reportDefinition.DataSources; for (int i = 0; i < dataSources.Count; i++) { List <DataSet> dataSets = dataSources[i].DataSets; if (dataSets == null) { continue; } for (int j = 0; j < dataSets.Count; j++) { DataSet dataSet = dataSets[j]; if (dataSet != null) { DataSetInstance dataSetInstance = GetDataSetInstance(dataSet, odpContext); if (dataSetInstance != null && m_noRows && !dataSetInstance.NoRows) { m_noRows = false; } } } } }
internal override IRecordRowReader CreateSequentialDataReader(Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataSet, out Microsoft.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance) { LiveRecordRowReader liveRecordRowReader = new LiveRecordRowReader(dataSet, m_odpContext); dataSetInstance = liveRecordRowReader.DataSetInstance; RegisterDisposableDataReaderOrIdcDataManager(liveRecordRowReader); return(liveRecordRowReader); }
internal override IRecordRowReader CreateSequentialDataReader(Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataSet, out Microsoft.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance) { FireAssert("CreateSequentialDataReader"); throw new InvalidOperationException("This method is not valid for this StateManager type."); }
internal void SetupFields(OnDemandProcessingContext odpContext, int dataSetIndex) { DataSetInstance dataSetInstance = odpContext.CurrentReportInstance.GetDataSetInstance(dataSetIndex, odpContext); SetupFields(odpContext, dataSetInstance); }
internal void SetDataSetInstance(DataSetInstance dataSetInstance) { m_dataSetInstances[dataSetInstance.DataSetDef.IndexInCollection] = dataSetInstance; }
internal RecordSetInfo(bool readerExtensionsSupported, bool persistCalculatedFields, DataSetInstance dataSetInstance, DateTime reportExecutionTime) { m_readerExtensionsSupported = readerExtensionsSupported; m_compareOptions = dataSetInstance.DataSetDef.GetCLRCompareOptions(); m_commandText = dataSetInstance.CommandText; m_rewrittenCommandText = dataSetInstance.RewrittenCommandText; m_cultureName = dataSetInstance.DataSetDef.CreateCultureInfoFromLcid().Name; m_executionTime = dataSetInstance.GetQueryExecutionTime(reportExecutionTime); int count = dataSetInstance.DataSetDef.Fields.Count; if (count <= 0) { return; } int num = 0; if (persistCalculatedFields) { m_fieldNames = new string[count]; } else { m_fieldNames = new string[dataSetInstance.DataSetDef.NonCalculatedFieldCount]; } for (int i = 0; i < count; i++) { if (persistCalculatedFields || !dataSetInstance.DataSetDef.Fields[i].IsCalculatedField) { m_fieldNames[num++] = dataSetInstance.DataSetDef.Fields[i].Name; } } }
internal abstract IRecordRowReader CreateSequentialDataReader(Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataSet, out Microsoft.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance);
private static void TraceDataSetInstance(DataSetInstance instance, int level) { Global.Tracer.Assert(instance != null, "(null != instance)"); Global.Tracer.Trace("{0}DataSet={1}, NoRows={2}, RowCount={3}, Lcid={4}, CS={5}, AS={6}, KS={7}, WS={8}, CommandText={9}", GetEmptyString(level), (instance.DataSetDef != null) ? instance.DataSetDef.Name : null, instance.NoRows, instance.RecordSetSize, instance.LCID, instance.CaseSensitivity.ToString(), instance.AccentSensitivity.ToString(), instance.KanatypeSensitivity.ToString(), instance.WidthSensitivity.ToString(), instance.RewrittenCommandText); TraceScopeInstance(instance, level); }
internal override IRecordRowReader CreateSequentialDataReader(Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataSet, out Microsoft.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance) { Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance currentReportInstance = m_odpContext.CurrentReportInstance; dataSetInstance = currentReportInstance.GetDataSetInstance(dataSet, m_odpContext); Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader = null; if (!dataSetInstance.NoRows) { dataChunkReader = new Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader(dataSetInstance, m_odpContext, dataSetInstance.DataChunkName); RegisterDisposableDataReaderOrIdcDataManager(dataChunkReader); } return(dataChunkReader); }
private void SetupObjectModels(OnDemandMode mode, bool needDeepCopyPath, int moveNextInstanceIndex, string scopeName) { Microsoft.ReportingServices.ReportIntermediateFormat.DataRegionInstance dataRegionInstance = null; IMemberHierarchy memberHierarchy = null; int num = -1; ScopeInstance scopeInstance = m_odpContext.CurrentReportInstance; List <InstancePathItem> lastInstancePath = m_lastInstancePath; List <InstancePathItem> list = null; int num2 = 0; Microsoft.ReportingServices.ReportIntermediateFormat.Report reportDefinition = m_odpContext.ReportDefinition; ObjectModelImpl reportObjectModel = m_odpContext.ReportObjectModel; bool flag = false; bool flag2 = false; int i = 0; try { if (m_lastRIFObject.InstancePath != null) { list = m_lastRIFObject.InstancePath; num2 = list.Count; } if (mode != OnDemandMode.InScope) { m_odpContext.EnsureCultureIsSetOnCurrentThread(); } if (mode == OnDemandMode.InScope && 1 == reportDefinition.DataSetsNotOnlyUsedInParameters && InScopeCompare(reportDefinition.FirstDataSet.Name, scopeName)) { return; } int num3 = 0; if (m_odpContext.InSubreport) { num3 = InstancePathItem.GetParentReportIndex(m_lastRIFObject.InstancePath, m_lastRIFObject.InstancePathItem.Type == InstancePathItemType.SubReport); } bool identicalPaths; int sharedPathIndex = InstancePathItem.GetSharedPathIndex(num3, lastInstancePath, list, reportObjectModel.AllFieldsCleared, out identicalPaths); for (int j = m_specialLastGroupingValues.Count; j < num3; j++) { m_specialLastGroupingValues.Add(null); } for (int k = num3; k < num2; k++) { InstancePathItem instancePathItem = list[k]; bool flag3 = false; if (mode != OnDemandMode.InScope) { flag3 = (k <= sharedPathIndex); } if (!flag3 && mode == OnDemandMode.FullSetup) { if (m_specialLastGroupingValues.Count < num2) { m_specialLastGroupingValues.Add(null); } else { m_specialLastGroupingValues[k] = null; } } switch (instancePathItem.Type) { case InstancePathItemType.SubReport: { if (scopeInstance.SubreportInstances == null || instancePathItem.IndexInCollection >= scopeInstance.SubreportInstances.Count) { break; } IReference <Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance> reference = scopeInstance.SubreportInstances[instancePathItem.IndexInCollection]; using (reference.PinValue()) { Microsoft.ReportingServices.ReportIntermediateFormat.SubReportInstance subReportInstance = reference.Value(); subReportInstance.SubReportDef.CurrentSubReportInstance = reference; if (mode != OnDemandMode.InScope && !subReportInstance.Initialized) { if (m_odpContext.IsTablixProcessingMode || m_odpContext.IsTopLevelSubReportProcessing) { return; } SubReportInitializer.InitializeSubReport(subReportInstance.SubReportDef); reference.PinValue(); } Global.Tracer.Assert(k == num2 - 1, "SubReport not last in instance path."); } break; } case InstancePathItemType.DataRegion: if (scopeInstance is Microsoft.ReportingServices.ReportIntermediateFormat.ReportInstance && (scopeInstance.DataRegionInstances == null || scopeInstance.DataRegionInstances.Count <= instancePathItem.IndexInCollection || scopeInstance.DataRegionInstances[instancePathItem.IndexInCollection] == null || scopeInstance.DataRegionInstances[instancePathItem.IndexInCollection].Value() == null)) { Global.Tracer.Assert(instancePathItem.IndexInCollection < reportDefinition.TopLevelDataRegions.Count, "(newItem.IndexInCollection < m_reportDefinition.TopLevelDataRegions.Count)"); Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataSet = reportDefinition.TopLevelDataRegions[instancePathItem.IndexInCollection].GetDataSet(reportDefinition); if (mode == OnDemandMode.InScope && InScopeCompare(dataSet.Name, scopeName)) { return; } PerformOnDemandTablixProcessing(dataSet); } scopeInstance = scopeInstance.DataRegionInstances[instancePathItem.IndexInCollection].Value(); flag = (m_inRecursiveColumnHierarchy = false); flag2 = (m_inRecursiveRowHierarchy = false); num = -1; dataRegionInstance = (scopeInstance as Microsoft.ReportingServices.ReportIntermediateFormat.DataRegionInstance); memberHierarchy = dataRegionInstance; if (mode == OnDemandMode.InScope && InScopeCompare(dataRegionInstance.DataRegionDef.Name, scopeName)) { return; } if (dataRegionInstance.DataSetIndexInCollection >= 0 && m_odpContext.CurrentDataSetIndex != dataRegionInstance.DataSetIndexInCollection && mode != OnDemandMode.InScope) { if (!flag3) { Microsoft.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance = m_odpContext.CurrentReportInstance.GetDataSetInstance(dataRegionInstance.DataSetIndexInCollection, m_odpContext); if (dataSetInstance != null) { dataSetInstance.SetupEnvironment(m_odpContext, newDataSetDefinition: true); i = 0; } } else { i = k + 1; } } if (mode == OnDemandMode.InScope) { break; } if (!flag3) { dataRegionInstance.SetupEnvironment(m_odpContext); i = 0; if (dataRegionInstance.NoRows) { dataRegionInstance.DataRegionDef.NoRows = true; dataRegionInstance.DataRegionDef.ResetTopLevelDynamicMemberInstanceCount(); return; } dataRegionInstance.DataRegionDef.NoRows = false; } else { i = k + 1; } break; case InstancePathItemType.ColumnMemberInstanceIndexTopMost: scopeInstance = dataRegionInstance; break; case InstancePathItemType.Cell: { if (-1 == num) { num = 0; } IList <Microsoft.ReportingServices.ReportIntermediateFormat.DataCellInstance> cellInstances = memberHierarchy.GetCellInstances(num); if (cellInstances == null) { if (flag2 && flag) { reportObjectModel.ResetFieldValues(); } } else { if (cellInstances.Count <= instancePathItem.IndexInCollection) { break; } Microsoft.ReportingServices.ReportIntermediateFormat.DataCellInstance dataCellInstance = cellInstances[instancePathItem.IndexInCollection]; if (dataCellInstance != null) { scopeInstance = dataCellInstance; if (!flag3) { dataCellInstance.SetupEnvironment(m_odpContext, m_odpContext.CurrentDataSetIndex); i = 0; } else { i = k + 1; } } } break; } case InstancePathItemType.None: continue; } if (!instancePathItem.IsDynamicMember) { continue; } IList <DataRegionMemberInstance> childMemberInstances = ((IMemberHierarchy)scopeInstance).GetChildMemberInstances(instancePathItem.Type == InstancePathItemType.RowMemberInstanceIndex, instancePathItem.IndexInCollection); if (childMemberInstances == null) { reportObjectModel.ResetFieldValues(); return; } int num4 = (k != num2 - 1 || moveNextInstanceIndex < 0 || moveNextInstanceIndex >= childMemberInstances.Count) ? ((instancePathItem.InstanceIndex >= 0) ? instancePathItem.InstanceIndex : 0) : moveNextInstanceIndex; if (num4 >= childMemberInstances.Count) { instancePathItem.ResetContext(); num4 = 0; } DataRegionMemberInstance dataRegionMemberInstance = childMemberInstances[num4]; if (mode == OnDemandMode.FullSetup) { dataRegionMemberInstance.MemberDef.InstanceCount = childMemberInstances.Count; dataRegionMemberInstance.MemberDef.CurrentMemberIndex = num4; } scopeInstance = dataRegionMemberInstance; m_lastRecursiveLevel = dataRegionMemberInstance.RecursiveLevel; Microsoft.ReportingServices.ReportIntermediateFormat.ReportHierarchyNode memberDef = dataRegionMemberInstance.MemberDef; if (mode == OnDemandMode.InScope && InScopeCompare(memberDef.Grouping.Name, scopeName)) { return; } if (instancePathItem.Type == InstancePathItemType.RowMemberInstanceIndex) { memberHierarchy = dataRegionMemberInstance; flag2 = true; } else { num = dataRegionMemberInstance.MemberInstanceIndexWithinScopeLevel; flag = true; } if (mode == OnDemandMode.FullSetup && !flag3) { dataRegionMemberInstance.SetupEnvironment(m_odpContext, m_odpContext.CurrentDataSetIndex); i = 0; Microsoft.ReportingServices.ReportIntermediateFormat.Grouping grouping = memberDef.Grouping; if (grouping.Parent != null) { if (memberDef.IsColumn) { m_inRecursiveColumnHierarchy = true; } else { m_inRecursiveRowHierarchy = true; } if (memberDef.IsTablixMember) { memberDef.SetMemberInstances(childMemberInstances); memberDef.SetRecursiveParentIndex(dataRegionMemberInstance.RecursiveParentIndex); memberDef.SetInstanceHasRecursiveChildren(dataRegionMemberInstance.HasRecursiveChildren); } } else if (memberDef.IsColumn) { m_inRecursiveColumnHierarchy = false; } else { m_inRecursiveRowHierarchy = false; } grouping.RecursiveLevel = m_lastRecursiveLevel; grouping.SetGroupInstanceExpressionValues(dataRegionMemberInstance.GroupExprValues); if (mode != 0 || grouping == null || grouping.GroupExpressions == null || grouping.GroupExpressions.Count <= 0) { continue; } Microsoft.ReportingServices.ReportIntermediateFormat.ExpressionInfo expressionInfo = grouping.GroupExpressions[0]; if (expressionInfo.Type != Microsoft.ReportingServices.ReportIntermediateFormat.ExpressionInfo.Types.Field) { continue; } Microsoft.ReportingServices.ReportIntermediateFormat.Field field = memberDef.DataRegionDef.GetDataSet(reportDefinition).Fields[expressionInfo.IntValue]; if (field.DataField != null) { string dataField = field.DataField; object second = dataRegionMemberInstance.GroupExprValues[0]; PairObj <string, object> pairObj = m_specialLastGroupingValues[k]; if (pairObj == null) { pairObj = new PairObj <string, object>(dataField, second); m_specialLastGroupingValues[k] = pairObj; } else { pairObj.First = dataField; pairObj.Second = second; } } } else { i = k + 1; } } if (mode == OnDemandMode.FullSetup && !identicalPaths && scopeInstance != null && i > 0) { for (; i < m_lastInstancePath.Count; i++) { if (m_lastInstancePath[i].IsScope) { scopeInstance.SetupFields(m_odpContext, m_odpContext.CurrentDataSetIndex); break; } } } if (mode != 0 || m_odpContext.IsTablixProcessingMode || m_odpContext.CurrentReportInstance == null || dataRegionInstance != null || reportDefinition.DataSetsNotOnlyUsedInParameters != 1) { return; } Microsoft.ReportingServices.ReportIntermediateFormat.DataSet firstDataSet = reportDefinition.FirstDataSet; Microsoft.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance2 = m_odpContext.CurrentReportInstance.GetDataSetInstance(firstDataSet, m_odpContext); if (dataSetInstance2 != null) { bool flag4 = true; if (!m_odpContext.IsTablixProcessingComplete(firstDataSet.IndexInCollection)) { PerformOnDemandTablixProcessing(firstDataSet); flag4 = false; } if (m_odpContext.CurrentOdpDataSetInstance == dataSetInstance2) { flag4 = false; } if (flag4) { dataSetInstance2.SetupEnvironment(m_odpContext, newDataSetDefinition: true); } else if (!dataSetInstance2.NoRows) { dataSetInstance2.SetupFields(m_odpContext, dataSetInstance2); } } } finally { if (needDeepCopyPath) { InstancePathItem.DeepCopyPath(list, ref m_lastInstancePath); } } }