From 2e27b0353272f5c2f98db8bd0a013512ea9f019b Mon Sep 17 00:00:00 2001
From: Jaap Jansma <jaap.jansma@civicoop.org>
Date: Tue, 12 Mar 2024 14:09:47 +0100
Subject: [PATCH] Fixed issue with in memory data flows. Such as the duplicate
 contacts.

---
 CHANGELOG.md                                         |  4 +++-
 CRM/Contact/DataProcessorContactSummaryTab.php       |  2 +-
 .../DataFlow/CombinedDataFlow/CombinedDataFlow.php   | 12 +++++++++---
 info.xml                                             |  2 +-
 4 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1d10bc72..7691a97c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,6 @@
-# Version 1.99 (not yet released)
+# Version 1.99
+
+* Fixed issue with in memory data flows. Such as the duplicate contacts.
 
 # Version 1.98
 
diff --git a/CRM/Contact/DataProcessorContactSummaryTab.php b/CRM/Contact/DataProcessorContactSummaryTab.php
index 7f25cbaf..52454424 100644
--- a/CRM/Contact/DataProcessorContactSummaryTab.php
+++ b/CRM/Contact/DataProcessorContactSummaryTab.php
@@ -353,7 +353,7 @@ class CRM_Contact_DataProcessorContactSummaryTab implements UIFormOutputInterfac
     $fieldSpecification = clone $fieldSpecification;
     $fieldSpecification->alias = 'contact_summary_tab_contact_id';
     $dataFlow = $dataSource->ensureField($fieldSpecification);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $dataProcessorClass->isAllSql()) {
       $tableAlias = self::getTableAlias($dataFlow);
       $whereClause = new SimpleWhereClause($tableAlias, $fieldSpecification->name, '=', $contact_id, $fieldSpecification->type);
       $dataFlow->addWhereClause($whereClause);
diff --git a/Civi/DataProcessor/DataFlow/CombinedDataFlow/CombinedDataFlow.php b/Civi/DataProcessor/DataFlow/CombinedDataFlow/CombinedDataFlow.php
index dd944f05..079d27a0 100644
--- a/Civi/DataProcessor/DataFlow/CombinedDataFlow/CombinedDataFlow.php
+++ b/Civi/DataProcessor/DataFlow/CombinedDataFlow/CombinedDataFlow.php
@@ -158,9 +158,13 @@ class CombinedDataFlow extends AbstractDataFlow implements MultipleSourceDataFlo
   protected function getAllRecordsFromDataFlowAsArray(AbstractDataFlow $dataFlow, int $batchSize=0): array {
     $records = array();
     $i = 0;
-    while(($record = $dataFlow->retrieveNextRecord()) && ($i < $batchSize || $batchSize == 0)) {
-      $records[] = $record;
-      $i++;
+    try {
+      while (($record = $dataFlow->retrieveNextRecord()) && ($i < $batchSize || $batchSize == 0)) {
+        $records[] = $record;
+        $i++;
+      }
+    } catch (EndOfFlowException $e) {
+      // Do nothing
     }
     return $records;
   }
@@ -208,6 +212,8 @@ class CombinedDataFlow extends AbstractDataFlow implements MultipleSourceDataFlo
       foreach ($record as $field => $value) {
         $out[$fieldNameprefix . $field] = $value;
       }
+    } else {
+      $out = $record;
     }
     $this->currentRecordIndex++;
     return $out;
diff --git a/info.xml b/info.xml
index 5d72da8b..d2b2ed23 100644
--- a/info.xml
+++ b/info.xml
@@ -15,7 +15,7 @@
     <url desc="Licensing">http://www.gnu.org/licenses/agpl-3.0.html</url>
   </urls>
   <releaseDate>2024-03-12</releaseDate>
-  <version>1.99-dev</version>
+  <version>1.99</version>
   <develStage>stable</develStage>
   <compatibility>
     <ver>5.37</ver>
-- 
GitLab