Commit 52f45f9
committed
[BugFix] Order PPLSimplifyDedupRule before FilterMergeRule in HEP program (#7)
When a user WHERE sits below dedup, the synthetic IS NOT NULL filter that
PPL emits as part of dedup keepempty=false ends up adjacent to the user
filter above the scan. The HEP program in CalciteToolsHelper registered
both FilterMergeRule and PPLSimplifyDedupRule via addRuleCollection,
which lets HepPlanner schedule them in either order. When FilterMergeRule
fires first the two adjacent filters are merged into a single filter
whose condition is AND(IS NOT NULL(field), <user predicate>);
PPLSimplifyDedupRule's bottom operand calls mayBeFilterFromBucketNonNull,
which only accepts a pure IS NOT NULL or AND-of-IS-NOT-NULLs, so the
merged condition fails the predicate, no LogicalDedup is produced, and
the OpenSearch DedupPushdownRule has nothing to match — dedup falls back
to the row-number window form executed on the coordinator.
Switch the HEP program to two sequential addRuleInstance calls
(PPLSimplifyDedupRule first to fixpoint, then FilterMergeRule). Sequential
addRuleInstance instructions guarantee deterministic ordering, so the
simplify rule always sees the original adjacent-filter shape and dedup
pushdown is preserved when a where clause is present.
Signed-off-by: ryan-gh-bot <ryan-gh-bot@users.noreply.github.com>1 parent d099d3e commit 52f45f9
3 files changed
Lines changed: 115 additions & 7 deletions
File tree
- core/src/main/java/org/opensearch/sql/calcite/utils
- ppl/src/test/java/org/opensearch/sql/ppl/calcite
Lines changed: 19 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
39 | | - | |
40 | 39 | | |
41 | 40 | | |
42 | 41 | | |
| |||
59 | 58 | | |
60 | 59 | | |
61 | 60 | | |
62 | | - | |
63 | 61 | | |
64 | 62 | | |
65 | 63 | | |
| |||
551 | 549 | | |
552 | 550 | | |
553 | 551 | | |
554 | | - | |
555 | | - | |
556 | | - | |
557 | | - | |
| 552 | + | |
| 553 | + | |
| 554 | + | |
| 555 | + | |
| 556 | + | |
| 557 | + | |
| 558 | + | |
| 559 | + | |
| 560 | + | |
| 561 | + | |
| 562 | + | |
| 563 | + | |
| 564 | + | |
| 565 | + | |
| 566 | + | |
558 | 567 | | |
559 | | - | |
| 568 | + | |
| 569 | + | |
| 570 | + | |
| 571 | + | |
560 | 572 | | |
561 | 573 | | |
562 | 574 | | |
| |||
Lines changed: 15 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| 48 | + | |
48 | 49 | | |
49 | 50 | | |
50 | 51 | | |
| |||
110 | 111 | | |
111 | 112 | | |
112 | 113 | | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
113 | 128 | | |
114 | 129 | | |
115 | 130 | | |
| |||
Lines changed: 81 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
353 | 353 | | |
354 | 354 | | |
355 | 355 | | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
356 | 437 | | |
0 commit comments