somu-imply commented on code in PR #14587:
URL: https://github.com/apache/druid/pull/14587#discussion_r1264291499


##########
processing/src/main/java/org/apache/druid/segment/UnnestStorageAdapter.java:
##########
@@ -366,24 +366,16 @@ void addPreFilter(@Nullable final Filter filter)
       final int origFilterSize;
       if (queryFilter.getRequiredColumns().contains(outputColumnName)) {
         // outside filter contains unnested column
-        // requires check for OR
-        if (queryFilter instanceof OrFilter) {
-          origFilterSize = ((OrFilter) queryFilter).getFilters().size();
-          for (Filter filter : ((OrFilter) queryFilter).getFilters()) {
-            if (filter.getRequiredColumns().contains(outputColumnName)) {
-              final Filter newFilter = rewriteFilterOnUnnestColumnIfPossible(
-                  filter,
-                  inputColumn,
-                  inputColumnCapabilites
-              );
-              if (newFilter != null) {
-                preFilterList.add(newFilter);
-              }
-            } else {
-              preFilterList.add(filter);
-            }
-          }
-          if (preFilterList.size() == origFilterSize) {
+        // requires check for OR and And filters, disqualify rewrite for 
non-unnest filters
+        if (queryFilter instanceof BooleanFilter) {
+          origFilterSize = ((BooleanFilter) queryFilter).getFilters().size();
+          recursiveRewriteOnUnnestFilters(
+              (BooleanFilter) queryFilter,
+              preFilterList,
+              inputColumn,
+              inputColumnCapabilites
+          );
+          if (preFilterList.size() >= origFilterSize) {
             // there has been successful rewrites
             final OrFilter preOrFilter = new OrFilter(preFilterList);
             filterSplitter.addPreFilter(preOrFilter);

Review Comment:
   Oh shoot, I missed that. Good catch. We are extracting the filters and 
adding each to the pre-filter list. Maybe at each level of recursion, we need 
to recreate the And/Or filter and add it back to the pre-filter list. In such a 
case the number of filters in pre-filter list will be equal to the original 
filter size.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to