public void RegisterOnDemandFieldValueUpdate(long firstRowOffsetInScope, DataSetInstance dataSetInstance, AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataReader) { this.m_pendingFieldValueUpdate = true; this.m_lastRowOffset = firstRowOffsetInScope; this.m_dataSetInstance = dataSetInstance; this.m_dataReader = dataReader; }
private void Initialize(ObjectModelImpl reportOM, FieldsImpl fields, DataSetCore dataSet, DataSetInstance dataSetInstance, AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataReader, bool allFieldsCleared, bool pendingFieldValueUpdate, long lastRowOffset) { this.m_fields = fields; this.m_dataSet = dataSet; this.m_dataSetInstance = dataSetInstance; this.m_dataReader = dataReader; this.m_allFieldsCleared = allFieldsCleared; this.m_pendingFieldValueUpdate = pendingFieldValueUpdate; this.m_lastRowOffset = lastRowOffset; this.AttachToDataSetCache(reportOM); }
public override IRecordRowReader CreateSequentialDataReader(AspNetCore.ReportingServices.ReportIntermediateFormat.DataSet dataSet, out AspNetCore.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance) { AspNetCore.ReportingServices.ReportIntermediateFormat.ReportInstance currentReportInstance = base.m_odpContext.CurrentReportInstance; dataSetInstance = currentReportInstance.GetDataSetInstance(dataSet, base.m_odpContext); AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader = null; if (!dataSetInstance.NoRows) { dataChunkReader = new AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader(dataSetInstance, base.m_odpContext, dataSetInstance.DataChunkName); base.RegisterDisposableDataReaderOrIdcDataManager(dataChunkReader); } return(dataChunkReader); }
public object[] EvaluateLookup() { bool flag = this.m_lookupInfo.ReturnFirstMatchOnly(); OnDemandProcessingContext odpContext = this.m_reportRuntime.ReportObjectModel.OdpContext; AspNetCore.ReportingServices.ReportIntermediateFormat.DataSet dataSet = odpContext.ReportDefinition.MappingDataSetIndexToDataSet[this.m_lookupInfo.DataSetIndexInCollection]; DataSetInstance dataSetInstance = odpContext.GetDataSetInstance(dataSet); if (dataSetInstance == null) { throw new ReportProcessingException_InvalidOperationException(); } if (dataSetInstance.NoRows) { return(LookupImpl.EmptyResult); } if (dataSetInstance.LookupResults == null || dataSetInstance.LookupResults[this.m_lookupInfo.DestinationIndexInCollection] == null) { if (!odpContext.CalculateLookup(this.m_lookupInfo)) { return(LookupImpl.EmptyResult); } Global.Tracer.Assert(null != dataSetInstance.LookupResults, "Lookup not initialized correctly by tablix processing"); } LookupObjResult lookupObjResult = dataSetInstance.LookupResults[this.m_lookupInfo.DestinationIndexInCollection]; if (lookupObjResult.ErrorOccured) { IErrorContext reportRuntime = this.m_reportRuntime; if (lookupObjResult.DataFieldStatus == DataFieldStatus.None && lookupObjResult.ErrorCode != 0) { reportRuntime.Register(lookupObjResult.ErrorCode, lookupObjResult.ErrorSeverity, lookupObjResult.ErrorMessageArgs); } else if (lookupObjResult.DataFieldStatus == DataFieldStatus.UnSupportedDataType) { reportRuntime.Register(ProcessingErrorCode.rsLookupOfInvalidExpressionDataType, Severity.Warning, lookupObjResult.ErrorMessageArgs); } throw new ReportProcessingException_InvalidOperationException(); } AspNetCore.ReportingServices.RdlExpressions.VariantResult result = this.m_lookupInfo.EvaluateSourceExpr(this.m_reportRuntime); this.CheckExprResultError(result); bool flag2 = lookupObjResult.HasBeenTransferred || odpContext.CurrentDataSetIndex != dataSet.IndexInCollection; List <object> list = null; CompareInfo compareInfo = null; CompareOptions clrCompareOptions = CompareOptions.None; bool nullsAsBlanks = false; bool useOrdinalStringKeyGeneration = false; try { if (flag2) { compareInfo = odpContext.CompareInfo; clrCompareOptions = odpContext.ClrCompareOptions; nullsAsBlanks = odpContext.NullsAsBlanks; useOrdinalStringKeyGeneration = odpContext.UseOrdinalStringKeyGeneration; dataSetInstance.SetupCollationSettings(odpContext); } LookupTable lookupTable = lookupObjResult.GetLookupTable(odpContext); Global.Tracer.Assert(lookupTable != null, "LookupTable must not be null"); ObjectModelImpl reportObjectModel = odpContext.ReportObjectModel; AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader = null; if (flag2) { dataChunkReader = odpContext.GetDataChunkReader(dataSet.IndexInCollection); } using (reportObjectModel.SetupNewFieldsWithBackup(dataSet, dataSetInstance, dataChunkReader)) { object[] array = result.Value as object[]; if (array == null) { array = new object[1] { result.Value }; } else { list = new List <object>(array.Length); } object[] array2 = array; foreach (object key in array2) { LookupMatches lookupMatches = default(LookupMatches); if (lookupTable.TryGetValue(key, out lookupMatches)) { int num = flag ? 1 : lookupMatches.MatchCount; if (list == null) { list = new List <object>(num); } for (int j = 0; j < num; j++) { lookupMatches.SetupRow(j, odpContext); AspNetCore.ReportingServices.RdlExpressions.VariantResult result2 = this.m_lookupInfo.EvaluateResultExpr(this.m_reportRuntime); this.CheckExprResultError(result2); list.Add(result2.Value); } } } } } finally { if (compareInfo != null) { odpContext.SetComparisonInformation(compareInfo, clrCompareOptions, nullsAsBlanks, useOrdinalStringKeyGeneration); } } object[] result3 = LookupImpl.EmptyResult; if (list != null) { result3 = list.ToArray(); } return(result3); }
public override bool PrepareFieldsCollectionForDirectFields() { if (base.m_odpContext.IsPageHeaderFooter && base.m_odpContext.ReportDefinition.DataSetsNotOnlyUsedInParameters == 1) { OnDemandProcessingContext parentContext = base.m_odpContext.ParentContext; AspNetCore.ReportingServices.ReportIntermediateFormat.DataSet firstDataSet = base.m_odpContext.ReportDefinition.FirstDataSet; AspNetCore.ReportingServices.ReportIntermediateFormat.DataSetInstance dataSetInstance = parentContext.GetDataSetInstance(firstDataSet); if (dataSetInstance != null) { if (!parentContext.IsTablixProcessingComplete(firstDataSet.IndexInCollection)) { OnDemandStateManagerFull onDemandStateManagerFull = (OnDemandStateManagerFull)parentContext.StateManager; onDemandStateManagerFull.PerformOnDemandTablixProcessing(firstDataSet); } if (!dataSetInstance.NoRows) { dataSetInstance.SetupEnvironment(base.m_odpContext, false); AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader = parentContext.GetDataChunkReader(firstDataSet.IndexInCollection); dataChunkReader.ResetCachedStreamOffset(); return(true); } } } return(false); }
public void UpdateFieldValues(ObjectModelImpl reportOM, bool useDataSetFieldsCache, bool reuseFieldObjects, AspNetCore.ReportingServices.ReportIntermediateFormat.RecordRow row, DataSetInstance dataSetInstance, bool readerExtensionsSupported) { Global.Tracer.Assert(null != row, "Empty data row / no data reader"); if (this.m_dataSetInstance != dataSetInstance) { this.m_dataSetInstance = dataSetInstance; this.m_dataSet = dataSetInstance.DataSetDef.DataSetCore; if (this.m_dataSet.FieldsContext != null && useDataSetFieldsCache) { this.m_fields = this.m_dataSet.FieldsContext.Fields; } else { reuseFieldObjects = false; } this.m_dataReader = null; this.m_lastRowOffset = DataFieldRow.UnInitializedStreamOffset; this.m_pendingFieldValueUpdate = false; } this.m_allFieldsCleared = false; FieldInfo[] fieldInfos = dataSetInstance.FieldInfos; if (this.m_fields.ReaderExtensionsSupported && this.m_dataSet.InterpretSubtotalsAsDetails == AspNetCore.ReportingServices.ReportIntermediateFormat.DataSet.TriState.False) { this.m_fields.IsAggregateRow = row.IsAggregateRow; this.m_fields.AggregationFieldCount = row.AggregationFieldCount; if (!row.IsAggregateRow) { this.m_fields.AggregationFieldCountForDetailRow = row.AggregationFieldCount; } } int num = 0; int count = this.m_dataSet.Fields.Count; int num2 = row.RecordFields.Length; for (num = 0; num < num2; num++) { FieldImpl fieldImpl = reuseFieldObjects ? this.m_fields.GetFieldByIndex(num) : null; AspNetCore.ReportingServices.ReportIntermediateFormat.Field fieldDef = this.m_dataSet.Fields[num]; AspNetCore.ReportingServices.ReportIntermediateFormat.RecordField recordField = row.RecordFields[num]; if (recordField == null) { if (!reuseFieldObjects || fieldImpl == null) { fieldImpl = new FieldImpl(reportOM, DataFieldStatus.IsMissing, null, fieldDef); } else { fieldImpl.UpdateValue(null, false, DataFieldStatus.IsMissing, null); } } else if (recordField.FieldStatus == DataFieldStatus.None) { if (!reuseFieldObjects || fieldImpl == null) { fieldImpl = new FieldImpl(reportOM, recordField.FieldValue, recordField.IsAggregationField, fieldDef); } else { fieldImpl.UpdateValue(recordField.FieldValue, recordField.IsAggregationField, DataFieldStatus.None, null); } } else if (!reuseFieldObjects || fieldImpl == null) { fieldImpl = new FieldImpl(reportOM, recordField.FieldStatus, ReportRuntime.GetErrorName(recordField.FieldStatus, null), fieldDef); } else { fieldImpl.UpdateValue(null, false, recordField.FieldStatus, ReportRuntime.GetErrorName(recordField.FieldStatus, null)); } if (recordField != null && fieldInfos != null) { FieldInfo fieldInfo = fieldInfos[num]; if (fieldInfo != null && fieldInfo.PropertyCount != 0 && recordField.FieldPropertyValues != null) { for (int i = 0; i < fieldInfo.PropertyCount; i++) { fieldImpl.SetProperty(fieldInfo.PropertyNames[i], recordField.FieldPropertyValues[i]); } } } this.m_fields[num] = fieldImpl; } if (num < count) { if (!reuseFieldObjects && reportOM.OdpContext.ReportRuntime.ReportExprHost != null) { this.m_dataSet.SetExprHost(reportOM.OdpContext.ReportRuntime.ReportExprHost, reportOM); } for (; num < count; num++) { AspNetCore.ReportingServices.ReportIntermediateFormat.Field fieldDef2 = this.m_dataSet.Fields[num]; FieldImpl fieldImpl2 = reuseFieldObjects ? this.m_fields.GetFieldByIndex(num) : null; if (reuseFieldObjects && fieldImpl2 != null) { if (!fieldImpl2.ResetCalculatedField()) { this.CreateAndInitializeCalculatedFieldWrapper(reportOM, readerExtensionsSupported, this.m_dataSet, num, fieldDef2); } } else { this.CreateAndInitializeCalculatedFieldWrapper(reportOM, readerExtensionsSupported, this.m_dataSet, num, fieldDef2); } } } }
public void UpdateDataSetInfo(DataSetInstance dataSetInstance, AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader) { this.m_dataSetInstance = dataSetInstance; this.m_dataReader = dataChunkReader; }
public SecondaryFieldsCollectionWithAutomaticRestore SetupNewFieldsWithBackup(AspNetCore.ReportingServices.ReportIntermediateFormat.DataSet dataset, DataSetInstance dataSetInstance, AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader) { SecondaryFieldsCollectionWithAutomaticRestore result = new SecondaryFieldsCollectionWithAutomaticRestore(this, this.m_currentFields); bool addRowIndex = this.m_currentFields.Fields.Count != this.m_currentFields.Fields.CountWithRowIndex; this.SetupFieldsForNewDataSetWithoutResettingOldFieldFlags(dataset, addRowIndex, dataSetInstance.NoRows, true); this.m_currentFields.UpdateDataSetInfo(dataSetInstance, dataChunkReader); return(result); }
public void RegisterOnDemandFieldValueUpdate(long firstRowOffsetInScope, DataSetInstance dataSetInstance, AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataReader) { this.m_currentFields.RegisterOnDemandFieldValueUpdate(firstRowOffsetInScope, dataSetInstance, dataReader); }
public void SetupEnvironment(OnDemandProcessingContext odpContext, bool newDataSetDefinition) { if (newDataSetDefinition) { odpContext.SetupFieldsForNewDataSet(this.m_dataSetDef, this, false, this.NoRows); } if (!this.NoRows) { if (base.m_firstRowOffset == DataFieldRow.UnInitializedStreamOffset) { odpContext.ReportObjectModel.CreateNoRows(); } else { AspNetCore.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader = odpContext.GetDataChunkReader(this.m_dataSetDef.IndexInCollection); dataChunkReader.ReadOneRowAtPosition(base.m_firstRowOffset); odpContext.ReportObjectModel.FieldsImpl.NewRow(base.m_firstRowOffset); odpContext.ReportObjectModel.UpdateFieldValues(!newDataSetDefinition, dataChunkReader.RecordRow, this, dataChunkReader.ReaderExtensionsSupported); } } }