internal void NextRow() { long streamOffset = m_odpContext.ReportObjectModel.FieldsImpl.StreamOffset; int num = -1; CommonRowCache tablixProcessingLookupRowCache = m_odpContext.TablixProcessingLookupRowCache; if (m_mustBufferAllRows) { num = tablixProcessingLookupRowCache.AddRow(RuntimeDataTablixObj.SaveData(m_odpContext)); if (m_firstRowCacheIndex == -1) { m_firstRowCacheIndex = num; } } IScalabilityCache tablixProcessingScalabilityCache = m_odpContext.TablixProcessingScalabilityCache; for (int i = 0; i < m_dataSet.LookupDestinationInfos.Count; i++) { LookupDestinationInfo lookupDestinationInfo = m_dataSet.LookupDestinationInfos[i]; LookupObjResult lookupObjResult = m_dataSetInstance.LookupResults[i]; if (lookupObjResult.ErrorOccured) { continue; } Microsoft.ReportingServices.RdlExpressions.VariantResult variantResult = lookupDestinationInfo.EvaluateDestExpr(m_odpContext, lookupObjResult); if (variantResult.ErrorOccurred) { lookupObjResult.DataFieldStatus = variantResult.FieldStatus; continue; } object value = variantResult.Value; LookupTable lookupTable = lookupObjResult.GetLookupTable(m_odpContext); try { if (!lookupTable.TryGetAndPinValue(value, out LookupMatches matches, out IDisposable cleanupRef)) { matches = ((!lookupDestinationInfo.UsedInSameDataSetTablixProcessing) ? new LookupMatches() : new LookupMatchesWithRows()); cleanupRef = lookupTable.AddAndPin(value, matches); } if (lookupDestinationInfo.IsMultiValue || !matches.HasRow) { matches.AddRow(streamOffset, num, tablixProcessingScalabilityCache); } cleanupRef.Dispose(); } catch (ReportProcessingException_SpatialTypeComparisonError reportProcessingException_SpatialTypeComparisonError) { throw new ReportProcessingException(m_lookupOwner.RegisterSpatialElementComparisonError(reportProcessingException_SpatialTypeComparisonError.Type)); } } if (!m_mustBufferAllRows) { m_lookupOwner.PostLookupNextRow(); } }
internal void FinishReadingRows() { if (!m_mustBufferAllRows) { return; } CommonRowCache tablixProcessingLookupRowCache = m_odpContext.TablixProcessingLookupRowCache; if (m_firstRowCacheIndex != -1) { for (int i = m_firstRowCacheIndex; i < tablixProcessingLookupRowCache.Count; i++) { tablixProcessingLookupRowCache.SetupRow(i, m_odpContext); m_lookupOwner.PostLookupNextRow(); } } }