private bool SetupNextRow()
 {
     try
     {
         m_currentRow = ReadOneRow(out int rowIndex);
         if (m_currentRow == null)
         {
             return(false);
         }
         FieldsImpl fieldsImpl = m_odpContext.ReportObjectModel.FieldsImpl;
         fieldsImpl.NewRow();
         if (fieldsImpl.AddRowIndex)
         {
             fieldsImpl.SetRowIndex(rowIndex);
         }
         m_odpContext.ReportObjectModel.UpdateFieldValues(reuseFieldObjects: false, m_currentRow, m_dataSetInstance, base.HasServerAggregateMetadata);
         return(true);
     }
     catch (Exception)
     {
         CleanupForException();
         FinalCleanup();
         throw;
     }
 }
예제 #2
0
 internal RecordRow(RecordRow original, int[] mappingDataSetFieldIndexesToDataChunk)
 {
     m_streamPosition = original.m_streamPosition;
     m_isAggregateRow = original.m_isAggregateRow;
     m_recordFields   = original.m_recordFields;
     ApplyFieldMapping(mappingDataSetFieldIndexesToDataChunk);
 }
예제 #3
0
 protected Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow ReadOneRow(out int rowIndex)
 {
     Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow result = null;
     rowIndex = -1;
     if (m_allDataRowsRead)
     {
         return(result);
     }
     do
     {
         bool flag = m_dataReader != null && m_dataReader.GetNextRow();
         if (m_dataRowsRead == 0)
         {
             InitializeBeforeFirstRow(flag);
         }
         if (flag)
         {
             m_odpContext.CheckAndThrowIfAborted();
             result   = ReadRow();
             rowIndex = m_dataRowsRead;
             IncrementRowCounterAndTrace();
         }
         else
         {
             result            = null;
             m_allDataRowsRead = true;
         }
     }while (!m_allDataRowsRead && m_restartPosition != null && m_restartPosition.ShouldSkip(m_odpContext, result));
     if (m_restartPosition != null)
     {
         m_restartPosition.DisableRowSkipping(result);
     }
     return(result);
 }
        private bool FetchSharedDataSetCached()
        {
            Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataSet = new Microsoft.ReportingServices.ReportIntermediateFormat.DataSet(m_dataSetDefinition.DataSetCore);
            ProcessingDataReader processingDataReader = new ProcessingDataReader(new DataSetInstance(dataSet), dataSet, m_odpContext, overrideWithSharedDataSetChunkSettings: true);
            IRowConsumer         consumerRequest      = m_odpContext.ExternalDataSetContext.ConsumerRequest;

            consumerRequest.SetProcessingDataReader(processingDataReader);
            long num = 0L;

            try
            {
                while (processingDataReader.GetNextRow())
                {
                    Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow underlyingRecordRowObject = processingDataReader.GetUnderlyingRecordRowObject();
                    consumerRequest.NextRow(underlyingRecordRowObject);
                    num++;
                }
            }
            finally
            {
                if (m_odpContext.JobContext != null)
                {
                    lock (m_odpContext.JobContext.SyncRoot)
                    {
                        m_odpContext.JobContext.RowCount += num;
                    }
                }
            }
            return(true);
        }
 protected override void ProcessRow(Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow row, int rowNumber)
 {
     if (m_processFromLiveDataReader && !m_dataSet.IsReferenceToSharedDataSet)
     {
         base.ProcessRow(row, rowNumber);
     }
     m_dataProcessingController.NextRow(row, rowNumber, m_processFromLiveDataReader && !m_canWriteDataChunk, base.HasServerAggregateMetadata);
 }
예제 #6
0
        protected void ProcessRows()
        {
            int rowIndex;

            for (Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow recordRow = ReadOneRow(out rowIndex); recordRow != null; recordRow = ReadOneRow(out rowIndex))
            {
                ProcessRow(recordRow, rowIndex);
            }
        }
 protected override void ProcessRow(Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow row, int rowNumber)
 {
     if (m_mustEvaluateThroughReportObjectModel)
     {
         base.ProcessRow(row, rowNumber);
         return;
     }
     m_currentRow = row;
     PostFilterNextRow();
 }
예제 #8
0
 internal void UpdateRecordRow(Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow recordRow)
 {
     m_recordRow = recordRow;
     if (m_fields != null)
     {
         for (int i = 0; i < m_fields.Length; i++)
         {
             m_fields[i]?.UpdateRecordField(m_recordRow.RecordFields[i]);
         }
     }
 }
예제 #9
0
 private Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow ReadRow()
 {
     _ = m_dataSet.Fields.Count;
     Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow underlyingRecordRowObject = m_dataReader.GetUnderlyingRecordRowObject();
     if (underlyingRecordRowObject != null)
     {
         return(underlyingRecordRowObject);
     }
     m_executionMetrics.StartTotalTimer();
     underlyingRecordRowObject = ConstructRecordRow();
     m_executionMetrics.RecordTotalTimerMeasurement();
     return(underlyingRecordRowObject);
 }
 public override void PostFilterNextRow()
 {
     if (m_mustEvaluateThroughReportObjectModel)
     {
         m_currentRow = new Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow(m_odpContext.ReportObjectModel.FieldsImpl, m_dataSet.DataSetCore.Fields.Count, m_dataSetInstance.FieldInfos);
     }
     if (WritesDataChunk)
     {
         m_dataChunkWriter.WriteRecordRow(m_currentRow);
     }
     if (m_consumerRequest != null)
     {
         m_consumerRequest.NextRow(m_currentRow);
     }
 }
        protected override void ProcessRow(Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow row, int rowNumber)
        {
            m_odpContext.ReportObjectModel.FieldsImpl.NewRow();
            m_odpContext.ReportObjectModel.UpdateFieldValues(reuseFieldObjects: false, row, m_dataSetInstance, base.HasServerAggregateMetadata);
            bool flag = true;

            if (m_filters != null)
            {
                flag = m_filters.PassFilters(new DataFieldRow(m_odpContext.ReportObjectModel.FieldsImpl, getAndSave: false));
            }
            if (flag)
            {
                PostFilterNextRow();
            }
        }
예제 #12
0
        private void PopulateServerAggregateInformationFromIndicatorFields(Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow recordRow)
        {
            int num  = 0;
            int num2 = 0;

            for (int i = 0; i < recordRow.RecordFields.Length; i++)
            {
                Microsoft.ReportingServices.ReportIntermediateFormat.RecordField recordField = recordRow.RecordFields[i];
                Microsoft.ReportingServices.ReportIntermediateFormat.Field       field       = m_dataSet.Fields[i];
                if (recordField == null || !field.HasAggregateIndicatorField)
                {
                    continue;
                }
                num++;
                Microsoft.ReportingServices.ReportIntermediateFormat.Field field2 = m_dataSet.Fields[field.AggregateIndicatorFieldIndex];
                bool processedValue = false;
                bool flag;
                if (field2.IsCalculatedField)
                {
                    if (field2.Value.Type == Microsoft.ReportingServices.ReportIntermediateFormat.ExpressionInfo.Types.Constant)
                    {
                        processedValue = field2.Value.BoolValue;
                        flag           = false;
                    }
                    else
                    {
                        flag = !Microsoft.ReportingServices.RdlExpressions.ReportRuntime.TryProcessObjectToBoolean(field2.Value.LiteralInfo.Value, out processedValue);
                    }
                }
                else
                {
                    Microsoft.ReportingServices.ReportIntermediateFormat.RecordField recordField2 = recordRow.RecordFields[field.AggregateIndicatorFieldIndex];
                    flag = (recordField2 == null || recordField2.FieldStatus != 0 || !Microsoft.ReportingServices.RdlExpressions.ReportRuntime.TryProcessObjectToBoolean(recordField2.FieldValue, out processedValue));
                }
                if (flag)
                {
                    m_odpContext.ErrorContext.Register(ProcessingErrorCode.rsMissingOrInvalidAggregateIndicatorFieldValue, Severity.Warning, Microsoft.ReportingServices.ReportProcessing.ObjectType.Field, field2.Name, "AggregateIndicatorField", m_dataSet.Name.MarkAsPrivate(), field.Name.MarkAsModelInfo());
                }
                else if (processedValue)
                {
                    num2++;
                    recordRow.IsAggregateRow = true;
                }
                recordField.IsAggregationField = !processedValue;
            }
            recordRow.AggregationFieldCount = num - num2;
        }
예제 #13
0
 public void NextRow(Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow originalRow)
 {
     if (base.ProcessRetrievedData)
     {
         m_odpContext.CheckAndThrowIfAborted();
         if (m_dataRowsRead == 0)
         {
             InitializeBeforeFirstRow(hasRows: true);
         }
         Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow recordRow = null;
         recordRow = ((!m_iRowConsumerMappingIdentical) ? new Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow(originalRow, m_iRowConsumerMappingDataSetFieldIndexesToDataChunk) : originalRow);
         if (m_dataSet.IsReferenceToSharedDataSet && recordRow.IsAggregateRow && m_dataSet.InterpretSubtotalsAsDetails != Microsoft.ReportingServices.ReportIntermediateFormat.DataSet.TriState.False)
         {
             recordRow.IsAggregateRow = false;
         }
         ProcessRow(recordRow, m_dataRowsRead);
         IncrementRowCounterAndTrace();
     }
 }
        public void NextRow(Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow row, int rowNumber, bool useRowOffset, bool readerExtensionsSupported)
        {
            FieldsImpl fieldsImplForUpdate = m_odpContext.ReportObjectModel.GetFieldsImplForUpdate(m_dataSet);

            if (useRowOffset)
            {
                fieldsImplForUpdate.NewRow();
            }
            else
            {
                fieldsImplForUpdate.NewRow(row.StreamPosition);
            }
            if (fieldsImplForUpdate.AddRowIndex)
            {
                fieldsImplForUpdate.SetRowIndex(rowNumber);
            }
            m_odpContext.ReportObjectModel.UpdateFieldValues(reuseFieldObjects: false, row, m_dataSetInstance, readerExtensionsSupported);
            m_dataSetObj.NextRow();
        }
        public bool ShouldSkip(OnDemandProcessingContext odpContext, Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow row)
        {
            if (row != null && m_enableRowSkipping)
            {
                foreach (RestartContext item in m_restartPosition)
                {
                    switch (item.DoesNotMatchRowRecordField(odpContext, row.RecordFields))
                    {
                    case RowSkippingControlFlag.Skip:
                        if (item.RestartMode == RestartMode.Query)
                        {
                            item.TraceStartAtRecoveryMessage();
                        }
                        return(true);

                    case RowSkippingControlFlag.Stop:
                        return(false);
                    }
                }
            }
            return(false);
        }
예제 #16
0
 internal RowInstance(FieldInfo[] fieldInfos, Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow recordRow)
 {
     m_recordRow  = recordRow;
     m_fieldInfos = fieldInfos;
 }
예제 #17
0
 protected abstract void ProcessRow(Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow aRow, int rowNumber);
예제 #18
0
 internal void UpdateFieldValues(bool reuseFieldObjects, Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow row, DataSetInstance dataSetInstance, bool readerExtensionsSupported)
 {
     m_currentFields.UpdateFieldValues(this, UseDataSetFieldsCache, reuseFieldObjects, row, dataSetInstance, readerExtensionsSupported);
 }
예제 #19
0
        private Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow ConstructRecordRow()
        {
            Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow recordRow = new Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow();
            bool flag  = m_dataReader.ReaderExtensionsSupported && !m_dataSet.HasAggregateIndicatorFields;
            bool flag2 = HasServerAggregateMetadata && (m_dataSet.InterpretSubtotalsAsDetails == Microsoft.ReportingServices.ReportIntermediateFormat.DataSet.TriState.False || (m_odpContext.IsSharedDataSetExecutionOnly && m_dataSet.InterpretSubtotalsAsDetails == Microsoft.ReportingServices.ReportIntermediateFormat.DataSet.TriState.Auto));

            Microsoft.ReportingServices.ReportIntermediateFormat.RecordField[] array2 = recordRow.RecordFields = new Microsoft.ReportingServices.ReportIntermediateFormat.RecordField[m_dataSet.NonCalculatedFieldCount];
            for (int i = 0; i < array2.Length; i++)
            {
                Microsoft.ReportingServices.ReportIntermediateFormat.Field field = m_dataSet.Fields[i];
                if (!m_dataSetInstance.IsFieldMissing(i))
                {
                    Microsoft.ReportingServices.ReportIntermediateFormat.RecordField recordField = new Microsoft.ReportingServices.ReportIntermediateFormat.RecordField();
                    try
                    {
                        array2[i] = recordField;
                        recordField.FieldValue = m_dataReader.GetColumn(i);
                        if (flag2)
                        {
                            if (flag)
                            {
                                recordField.IsAggregationField = m_dataReader.IsAggregationField(i);
                            }
                        }
                        else
                        {
                            recordField.IsAggregationField = true;
                        }
                        recordField.FieldStatus = DataFieldStatus.None;
                    }
                    catch (ReportProcessingException_FieldError aException)
                    {
                        recordField = (array2[i] = HandleFieldError(aException, i, field.Name));
                        if (recordField != null && !flag2)
                        {
                            recordField.IsAggregationField = true;
                        }
                    }
                    ReadExtendedPropertiesForRecordField(i, field, recordField);
                }
                else
                {
                    array2[i] = null;
                }
            }
            if (flag2)
            {
                if (flag)
                {
                    recordRow.IsAggregateRow        = m_dataReader.IsAggregateRow;
                    recordRow.AggregationFieldCount = m_dataReader.AggregationFieldCount;
                }
                else
                {
                    PopulateServerAggregateInformationFromIndicatorFields(recordRow);
                }
            }
            else
            {
                recordRow.AggregationFieldCount = m_dataSet.Fields.Count;
            }
            return(recordRow);
        }
예제 #20
0
        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);
                }
            }
        }
 public void DisableRowSkipping(Microsoft.ReportingServices.ReportIntermediateFormat.RecordRow row)
 {
     m_enableRowSkipping = false;
 }