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]