diff --git a/CHANGELOG.md b/CHANGELOG.md
index b58178bf5f96ce626d24438f1215e50924b05942..7b4a4146a2e7dd86c55b765701838c3655dd5f70 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,6 @@
 # Version 1.97 (not yet released)
 
+* Fixed issue when a non-sql data source is used in the data processor and adding filters.
 * Added a datasource for Country: Now you can sort on the country name.
 
 # Version 1.96
diff --git a/CRM/Contact/DataProcessorContactSummaryTab.php b/CRM/Contact/DataProcessorContactSummaryTab.php
index 8f9121574a6b6747adecbc4b9d4ce2bc0abf64c5..7f25cbaf24f160aa8b15b29a71d0543bf1c994a5 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) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = self::getTableAlias($dataFlow);
       $whereClause = new SimpleWhereClause($tableAlias, $fieldSpecification->name, '=', $contact_id, $fieldSpecification->type);
       $dataFlow->addWhereClause($whereClause);
diff --git a/Civi/DataProcessor/FilterCollection/FilterCollection.php b/Civi/DataProcessor/FilterCollection/FilterCollection.php
index 8fb0a5c5d3e1bae9ac1700ca61d6a172694f6e6f..34db2023b2fda13409a3e07d4f0d5790f26e934b 100644
--- a/Civi/DataProcessor/FilterCollection/FilterCollection.php
+++ b/Civi/DataProcessor/FilterCollection/FilterCollection.php
@@ -215,4 +215,17 @@ class FilterCollection {
       $this->data_processor->getDataFlow()->removeWhereClause($this->whereClause);
     }
   }
+
+  /**
+   * Returns whether we should use the addWhere and removeWhere or addFilter or removeFilter functions.
+   *
+   * @return bool
+   * @throws \Civi\DataProcessor\DataFlow\InvalidFlowException
+   */
+  public function useWhere(): bool {
+    if ($this->data_processor->getDataFlow() instanceof SqlDataFlow) {
+      return true;
+    }
+    return false;
+  }
 }
diff --git a/Civi/DataProcessor/FilterHandler/AgeFilterHandler.php b/Civi/DataProcessor/FilterHandler/AgeFilterHandler.php
index 8f28e3f7085128bce6febadeb0bb80e12642f89a..ed53979b7e62d5fbcfeec7f91ba7661f2407f2c4 100644
--- a/Civi/DataProcessor/FilterHandler/AgeFilterHandler.php
+++ b/Civi/DataProcessor/FilterHandler/AgeFilterHandler.php
@@ -45,7 +45,7 @@ class AgeFilterHandler extends AbstractFieldFilterHandler {
     $this->resetFilter();
     $dataFlow  = $this->dataSource->ensureField($this->inputFieldSpecification);
     $tableAlias = $this->getTableAlias($dataFlow);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $value = null;
       if (isset($filter['value']) && is_array($filter['value'])) {
         $value = array();
diff --git a/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php b/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php
index 61778b3137969149fe9fec1dc57e3ddb64363395..f2ec16db8c4371bfd87306f315d1dc4c4917d423 100644
--- a/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php
+++ b/Civi/DataProcessor/FilterHandler/CaseRoleFilter.php
@@ -82,7 +82,7 @@ class CaseRoleFilter extends AbstractFieldFilterHandler {
       $inOperator = 'IN';
     }
 
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $this->whereClause = new SqlDataFlow\InTableWhereClause(
         'case_id',
diff --git a/Civi/DataProcessor/FilterHandler/ContactHasActiveRecurringContributions.php b/Civi/DataProcessor/FilterHandler/ContactHasActiveRecurringContributions.php
index 9c2c668e3e47addee39804fb5a6c5f629579c813..e1395a6519af52f9b7b9ba8dd3d30912448369d5 100644
--- a/Civi/DataProcessor/FilterHandler/ContactHasActiveRecurringContributions.php
+++ b/Civi/DataProcessor/FilterHandler/ContactHasActiveRecurringContributions.php
@@ -119,7 +119,7 @@ class ContactHasActiveRecurringContributions extends AbstractFieldFilterHandler
   public function setFilter($filter) {
     $this->resetFilter();
     $dataFlow  = $this->dataSource->ensureField($this->inputFieldSpecification);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $fieldName = $this->inputFieldSpecification->getName();
       $fieldAlias = $this->inputFieldSpecification->alias;
diff --git a/Civi/DataProcessor/FilterHandler/ContactHasContributionWithStatus.php b/Civi/DataProcessor/FilterHandler/ContactHasContributionWithStatus.php
index 91a4083d5feb5773e5169d93cb68124e19b63a1a..aee6fba057027362179ca8bd0eea73f86628060e 100644
--- a/Civi/DataProcessor/FilterHandler/ContactHasContributionWithStatus.php
+++ b/Civi/DataProcessor/FilterHandler/ContactHasContributionWithStatus.php
@@ -183,7 +183,7 @@ class ContactHasContributionWithStatus extends AbstractFieldFilterHandler {
   public function setFilter($filter) {
     $this->resetFilter();
     $dataFlow  = $this->dataSource->ensureField($this->inputFieldSpecification);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $fieldName = $this->inputFieldSpecification->getName();
       $fieldAlias = $this->inputFieldSpecification->alias;
diff --git a/Civi/DataProcessor/FilterHandler/ContactHasEventRegistrationOfType.php b/Civi/DataProcessor/FilterHandler/ContactHasEventRegistrationOfType.php
index 0c48fd655e38cbf36a29da04ba719eaafa7b1967..fea76c330f134d3032e26f2b505eb430c926cd6d 100644
--- a/Civi/DataProcessor/FilterHandler/ContactHasEventRegistrationOfType.php
+++ b/Civi/DataProcessor/FilterHandler/ContactHasEventRegistrationOfType.php
@@ -183,7 +183,7 @@ class ContactHasEventRegistrationOfType extends AbstractFieldFilterHandler {
   public function setFilter($filter) {
     $this->resetFilter();
     $dataFlow  = $this->dataSource->ensureField($this->inputFieldSpecification);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $fieldName = $this->inputFieldSpecification->getName();
       $fieldAlias = $this->inputFieldSpecification->alias;
diff --git a/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php b/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php
index 52dfa9044c37a8e2a0d694c42eeb0c9789c539a1..aeb7b1a70347822e3412010ff6bb34b0fcbc4471 100644
--- a/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php
+++ b/Civi/DataProcessor/FilterHandler/ContactInGroupFilter.php
@@ -71,7 +71,7 @@ class ContactInGroupFilter extends AbstractFieldFilterHandler {
 
 
 
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       // Look in the group contact table
       $groupTableAlias = 'civicrm_group_contact_'.$this->inputFieldSpecification->alias;
       $groupFilters = array(
diff --git a/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php b/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php
index fb00d2587997128abd0e804f608b52716af2a55a..9c9c9663516bb3a0d12a1062708433c29d8da796 100644
--- a/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php
+++ b/Civi/DataProcessor/FilterHandler/ContactTypeFilter.php
@@ -53,7 +53,7 @@ class ContactTypeFilter extends AbstractFieldFilterHandler {
     }
     if (count($contactTypeClauses)) {
       $contactTypeClause = new SqlDataFlow\OrClause($contactTypeClauses);
-      if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+      if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
         $tableAlias = $this->getTableAlias($dataFlow);
         $this->whereClause = new SqlDataFlow\InTableWhereClause(
           'id',
diff --git a/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php b/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php
index 4b89d6651b5cb2880433a6b21db9f313adee361e..1a78ae191676b4d798490a33d7cca940ca19d565 100644
--- a/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php
+++ b/Civi/DataProcessor/FilterHandler/ContactWithTagFilter.php
@@ -45,7 +45,7 @@ class ContactWithTagFilter extends AbstractFieldFilterHandler {
       new SqlDataFlow\SimpleWhereClause($tagTableAlias, 'tag_id', 'IN', $tag_ids),
     );
 
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $this->whereClause = new SqlDataFlow\InTableWhereClause(
         'entity_id',
diff --git a/Civi/DataProcessor/FilterHandler/DateFilter.php b/Civi/DataProcessor/FilterHandler/DateFilter.php
index 8b8c5c779ef56ddd681a3e99474ac25140c4c37c..2676f69de4a7829f8272103d0fd15b4fa052dc91 100644
--- a/Civi/DataProcessor/FilterHandler/DateFilter.php
+++ b/Civi/DataProcessor/FilterHandler/DateFilter.php
@@ -38,7 +38,7 @@ class DateFilter extends AbstractFieldFilterHandler {
     $this->resetFilter();
     $dataFlow  = $this->dataSource->ensureField($this->inputFieldSpecification);
     $tableAlias = $this->getTableAlias($dataFlow);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $value = null;
       if (isset($filter['value']) && is_array($filter['value'])) {
         $value = array();
diff --git a/Civi/DataProcessor/FilterHandler/DateMonthFilter.php b/Civi/DataProcessor/FilterHandler/DateMonthFilter.php
index d7115d33d7f73b702422ac5641fa7b54b7b2aa42..138962565f946b32bbdb7724991476327c57ae33 100644
--- a/Civi/DataProcessor/FilterHandler/DateMonthFilter.php
+++ b/Civi/DataProcessor/FilterHandler/DateMonthFilter.php
@@ -52,7 +52,7 @@ class DateMonthFilter extends AbstractFieldFilterHandler {
   public function setFilter($filter) {
     $this->resetFilter();
     $dataFlow  = $this->dataSource->ensureField($this->inputFieldSpecification);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $value = $filter['value'];
       if (!is_array($value)) {
diff --git a/Civi/DataProcessor/FilterHandler/DateWeekDayFilter.php b/Civi/DataProcessor/FilterHandler/DateWeekDayFilter.php
index 45bf8c1f43ed867653b1c8f4652f129c638568c3..e48e292d6454881ca607d66e44715c5eff1f919a 100644
--- a/Civi/DataProcessor/FilterHandler/DateWeekDayFilter.php
+++ b/Civi/DataProcessor/FilterHandler/DateWeekDayFilter.php
@@ -47,7 +47,7 @@ class DateWeekDayFilter extends AbstractFieldFilterHandler {
   public function setFilter($filter) {
     $this->resetFilter();
     $dataFlow  = $this->dataSource->ensureField($this->inputFieldSpecification);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $value = $filter['value'];
       if (!is_array($value)) {
diff --git a/Civi/DataProcessor/FilterHandler/LastEventDateFilter.php b/Civi/DataProcessor/FilterHandler/LastEventDateFilter.php
index ddba52eacceaa77d4f7a826587e53d5a308be0ee..85f8411f146f034c1440fe2874eeef8544087d9d 100644
--- a/Civi/DataProcessor/FilterHandler/LastEventDateFilter.php
+++ b/Civi/DataProcessor/FilterHandler/LastEventDateFilter.php
@@ -240,7 +240,7 @@ class LastEventDateFilter extends AbstractFieldFilterHandler {
 
 
     $dataFlow  = $this->dataSource->ensureField($this->inputFieldSpecification);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $fieldName = $this->inputFieldSpecification->getName();
       $fieldAlias = $this->inputFieldSpecification->alias;
diff --git a/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php b/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php
index 586e6667e1b8acf13d64f399e7ec0aec71d995f0..5e4d5b081e8308b0307dc8e19061c8772d9b6f73 100644
--- a/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php
+++ b/Civi/DataProcessor/FilterHandler/MultipleFieldFilter.php
@@ -181,7 +181,7 @@ class MultipleFieldFilter extends AbstractFilterHandler {
         $fieldSpec = $dataSource->getAvailableFields()->getFieldSpecificationByName($field_name);
       }
       $dataFlow = $dataSource->ensureField($fieldSpec);
-      if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+      if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
         $tableAlias = $this->getTableAlias($dataFlow);
         $clauses[] = new SqlDataFlow\SimpleWhereClause($tableAlias, $fieldSpec->getName(), $filterParams['op'], $filterParams['value'], $this->fieldSpecification->type);
       }
@@ -198,7 +198,7 @@ class MultipleFieldFilter extends AbstractFilterHandler {
           break;
       }
       $dataFlow  = $this->data_processor->getDataFlow();
-      if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+      if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
         $this->filterCollection->addWhere($this->whereClause);
       }
     }
diff --git a/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php b/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php
index 73dccd5b993b687416bd1959ebc194e4e3679c7e..dfea354d2238b2503f1aa7027407818bc6083f28 100644
--- a/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php
+++ b/Civi/DataProcessor/FilterHandler/PermissionToViewContactFilter.php
@@ -44,7 +44,7 @@ class PermissionToViewContactFilter extends AbstractFieldFilterHandler {
     $where = str_replace(["`contact_a`.", "contact_a."], "`{$contactTableAlias}`.", $where);
     if ($where) {
       $contactFilters[] = new SqlDataFlow\PureSqlStatementClause($where);
-      if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+      if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
         $tableAlias = $this->getTableAlias($dataFlow);
         $this->whereClause = new SqlDataFlow\InTableWhereClause(
           'id',
diff --git a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php
index 45d8950612bee26efa86113a8a367258f34bdfcb..35e4870e42da6795ccdf1db620f54edf8f4c6db4 100644
--- a/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php
+++ b/Civi/DataProcessor/FilterHandler/SimpleSqlFilter.php
@@ -25,7 +25,7 @@ class SimpleSqlFilter extends AbstractFieldFilterHandler {
   public function setFilter($filter) {
     $this->resetFilter();
     $dataFlow  = $this->dataSource->ensureField($this->inputFieldSpecification);
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $fieldName = $this->inputFieldSpecification->getName();
       if ($this->isMultiValueField()) {
diff --git a/Civi/DataProcessor/FilterHandler/WorldRegionFilter.php b/Civi/DataProcessor/FilterHandler/WorldRegionFilter.php
index b6d19cbee164428dc31207af9c69c934ae5594c9..bd74f0702c955bc555d0d9eee97b33e39e725f76 100644
--- a/Civi/DataProcessor/FilterHandler/WorldRegionFilter.php
+++ b/Civi/DataProcessor/FilterHandler/WorldRegionFilter.php
@@ -45,7 +45,7 @@ class WorldRegionFilter extends AbstractFieldFilterHandler {
     $countryFilters = array(
       new SqlDataFlow\SimpleWhereClause($countryTableAlias, 'region_id', 'IN', $region_ids),
     );
-    if ($dataFlow && $dataFlow instanceof SqlDataFlow) {
+    if ($dataFlow && $dataFlow instanceof SqlDataFlow && $this->filterCollection->useWhere()) {
       $tableAlias = $this->getTableAlias($dataFlow);
       $this->whereClause = new SqlDataFlow\InTableWhereClause(
         'id',
diff --git a/Civi/DataProcessor/ProcessorType/AbstractProcessorType.php b/Civi/DataProcessor/ProcessorType/AbstractProcessorType.php
index c251b2e55cd851677dd8cf261e239ff06ee5e8ad..9b259592ef3923b654af68270129e9db2ba664a9 100644
--- a/Civi/DataProcessor/ProcessorType/AbstractProcessorType.php
+++ b/Civi/DataProcessor/ProcessorType/AbstractProcessorType.php
@@ -67,6 +67,10 @@ abstract class AbstractProcessorType {
     }
   }
 
+  public function isAllSql(): bool {
+    return $this->allSqlDataFlows;
+  }
+
   /**
    * @return \Civi\DataProcessor\Source\SourceInterface[]
    */