internal void RegisterOnDemandFieldValueUpdate(long firstRowOffsetInScope, DataSetInstance dataSetInstance, Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataReader)
 {
     m_pendingFieldValueUpdate = true;
     m_lastRowOffset           = firstRowOffsetInScope;
     m_dataSetInstance         = dataSetInstance;
     m_dataReader = dataReader;
 }
 private void Initialize(ObjectModelImpl reportOM, FieldsImpl fields, DataSetCore dataSet, DataSetInstance dataSetInstance, Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataReader, bool allFieldsCleared, bool pendingFieldValueUpdate, long lastRowOffset)
 {
     m_fields                  = fields;
     m_dataSet                 = dataSet;
     m_dataSetInstance         = dataSetInstance;
     m_dataReader              = dataReader;
     m_allFieldsCleared        = allFieldsCleared;
     m_pendingFieldValueUpdate = pendingFieldValueUpdate;
     m_lastRowOffset           = lastRowOffset;
     AttachToDataSetCache(reportOM);
 }
Exemple #3
0
 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);
 }
        internal object[] EvaluateLookup()
        {
            bool flag = m_lookupInfo.ReturnFirstMatchOnly();
            OnDemandProcessingContext odpContext = m_reportRuntime.ReportObjectModel.OdpContext;

            Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataSet = odpContext.ReportDefinition.MappingDataSetIndexToDataSet[m_lookupInfo.DataSetIndexInCollection];
            DataSetInstance dataSetInstance = odpContext.GetDataSetInstance(dataSet);

            if (dataSetInstance == null)
            {
                throw new ReportProcessingException_InvalidOperationException();
            }
            if (dataSetInstance.NoRows)
            {
                return(EmptyResult);
            }
            if (dataSetInstance.LookupResults == null || dataSetInstance.LookupResults[m_lookupInfo.DestinationIndexInCollection] == null)
            {
                if (!odpContext.CalculateLookup(m_lookupInfo))
                {
                    return(EmptyResult);
                }
                Global.Tracer.Assert(dataSetInstance.LookupResults != null, "Lookup not initialized correctly by tablix processing");
            }
            LookupObjResult lookupObjResult = dataSetInstance.LookupResults[m_lookupInfo.DestinationIndexInCollection];

            if (lookupObjResult.ErrorOccured)
            {
                IErrorContext reportRuntime = 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();
            }
            Microsoft.ReportingServices.RdlExpressions.VariantResult result = m_lookupInfo.EvaluateSourceExpr(m_reportRuntime);
            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;
                Microsoft.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)
                    {
                        if (lookupTable.TryGetValue(key, out LookupMatches matches))
                        {
                            int num = flag ? 1 : matches.MatchCount;
                            if (list == null)
                            {
                                list = new List <object>(num);
                            }
                            for (int j = 0; j < num; j++)
                            {
                                matches.SetupRow(j, odpContext);
                                Microsoft.ReportingServices.RdlExpressions.VariantResult result2 = m_lookupInfo.EvaluateResultExpr(m_reportRuntime);
                                CheckExprResultError(result2);
                                list.Add(result2.Value);
                            }
                        }
                    }
                }
            }
            finally
            {
                if (compareInfo != null)
                {
                    odpContext.SetComparisonInformation(compareInfo, clrCompareOptions, nullsAsBlanks, useOrdinalStringKeyGeneration);
                }
            }
            object[] result3 = EmptyResult;
            if (list != null)
            {
                result3 = list.ToArray();
            }
            return(result3);
        }
 internal void SetupEnvironment(OnDemandProcessingContext odpContext, bool newDataSetDefinition)
 {
     if (newDataSetDefinition)
     {
         odpContext.SetupFieldsForNewDataSet(m_dataSetDef, this, addRowIndex: false, NoRows);
     }
     if (!NoRows)
     {
         if (m_firstRowOffset == DataFieldRow.UnInitializedStreamOffset)
         {
             odpContext.ReportObjectModel.CreateNoRows();
             return;
         }
         Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader = odpContext.GetDataChunkReader(m_dataSetDef.IndexInCollection);
         dataChunkReader.ReadOneRowAtPosition(m_firstRowOffset);
         odpContext.ReportObjectModel.FieldsImpl.NewRow(m_firstRowOffset);
         odpContext.ReportObjectModel.UpdateFieldValues(!newDataSetDefinition, dataChunkReader.RecordRow, this, dataChunkReader.ReaderExtensionsSupported);
     }
 }
 internal void UpdateDataSetInfo(DataSetInstance dataSetInstance, Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader)
 {
     m_dataSetInstance = dataSetInstance;
     m_dataReader      = dataChunkReader;
 }
        internal void UpdateFieldValues(ObjectModelImpl reportOM, bool useDataSetFieldsCache, bool reuseFieldObjects, Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow row, DataSetInstance dataSetInstance, bool readerExtensionsSupported)
        {
            Global.Tracer.Assert(row != null, "Empty data row / no data reader");
            if (m_dataSetInstance != dataSetInstance)
            {
                m_dataSetInstance = dataSetInstance;
                m_dataSet         = dataSetInstance.DataSetDef.DataSetCore;
                if (m_dataSet.FieldsContext != null && useDataSetFieldsCache)
                {
                    m_fields = m_dataSet.FieldsContext.Fields;
                }
                else
                {
                    reuseFieldObjects = false;
                }
                m_dataReader              = null;
                m_lastRowOffset           = DataFieldRow.UnInitializedStreamOffset;
                m_pendingFieldValueUpdate = false;
            }
            m_allFieldsCleared = false;
            FieldInfo[] fieldInfos = dataSetInstance.FieldInfos;
            if (m_fields.ReaderExtensionsSupported && m_dataSet.InterpretSubtotalsAsDetails == Microsoft.ReportingServices.ReportIntermediateFormat.DataSet.TriState.False)
            {
                m_fields.IsAggregateRow        = row.IsAggregateRow;
                m_fields.AggregationFieldCount = row.AggregationFieldCount;
                if (!row.IsAggregateRow)
                {
                    m_fields.AggregationFieldCountForDetailRow = row.AggregationFieldCount;
                }
            }
            int num   = 0;
            int count = m_dataSet.Fields.Count;
            int num2  = row.RecordFields.Length;

            for (num = 0; num < num2; num++)
            {
                FieldImpl fieldImpl = reuseFieldObjects ? m_fields.GetFieldByIndex(num) : null;
                Microsoft.ReportingServices.ReportIntermediateFormat.Field       fieldDef    = m_dataSet.Fields[num];
                Microsoft.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, isAggregationField: 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, isAggregationField: 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]);
                        }
                    }
                }
                m_fields[num] = fieldImpl;
            }
            if (num >= count)
            {
                return;
            }
            if (!reuseFieldObjects && reportOM.OdpContext.ReportRuntime.ReportExprHost != null)
            {
                m_dataSet.SetExprHost(reportOM.OdpContext.ReportRuntime.ReportExprHost, reportOM);
            }
            for (; num < count; num++)
            {
                Microsoft.ReportingServices.ReportIntermediateFormat.Field fieldDef2 = m_dataSet.Fields[num];
                FieldImpl fieldImpl2 = reuseFieldObjects ? m_fields.GetFieldByIndex(num) : null;
                if (reuseFieldObjects && fieldImpl2 != null)
                {
                    if (!fieldImpl2.ResetCalculatedField())
                    {
                        CreateAndInitializeCalculatedFieldWrapper(reportOM, readerExtensionsSupported, m_dataSet, num, fieldDef2);
                    }
                }
                else
                {
                    CreateAndInitializeCalculatedFieldWrapper(reportOM, readerExtensionsSupported, m_dataSet, num, fieldDef2);
                }
            }
        }
Exemple #8
0
        internal SecondaryFieldsCollectionWithAutomaticRestore SetupNewFieldsWithBackup(Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataset, DataSetInstance dataSetInstance, Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataChunkReader)
        {
            SecondaryFieldsCollectionWithAutomaticRestore result = new SecondaryFieldsCollectionWithAutomaticRestore(this, m_currentFields);
            bool addRowIndex = m_currentFields.Fields.Count != m_currentFields.Fields.CountWithRowIndex;

            SetupFieldsForNewDataSetWithoutResettingOldFieldFlags(dataset, addRowIndex, dataSetInstance.NoRows, forceNewFieldsContext: true);
            m_currentFields.UpdateDataSetInfo(dataSetInstance, dataChunkReader);
            return(result);
        }
Exemple #9
0
 internal void RegisterOnDemandFieldValueUpdate(long firstRowOffsetInScope, DataSetInstance dataSetInstance, Microsoft.ReportingServices.ReportIntermediateFormat.Persistence.ChunkManager.DataChunkReader dataReader)
 {
     m_currentFields.RegisterOnDemandFieldValueUpdate(firstRowOffsetInScope, dataSetInstance, dataReader);
 }