- Notifications
You must be signed in to change notification settings - Fork5
Commit9581103
committed
Improve planner to drop constant-NULL inputs of AND/OR where it's legal.
In general we can't discard constant-NULL inputs, since they could changethe result of the AND/OR to be NULL. But at top level of WHERE, we do notneed to distinguish a NULL result from a FALSE result, so it's okay totreat NULL as FALSE and then simplify AND/OR accordingly.This is a very ancient oversight, but in 9.2 and later it can lead tofailure to optimize queries that previous releases did optimize, as aresult of more aggressive parameter substitution rules making it possibleto reduce more subexpressions to NULL constants. This is the root cause ofbug #10171 from Arnold Scheffler. We could alternatively have fixed thatby teaching orclauses.c to ignore constant-NULL OR arms, but it seemsbetter to get rid of them globally.I resisted the temptation to back-patch this change into all activebranches, but it seems appropriate to back-patch as far as 9.2 so thatthere will not be performance regressions of the kind shown in this bug.1 parentdbe3161 commit9581103
File tree
3 files changed
+85
-12
lines changed- src
- backend/optimizer/prep
- test/regress
- expected
- sql
3 files changed
+85
-12
lines changedLines changed: 67 additions & 12 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
293 | 293 |
| |
294 | 294 |
| |
295 | 295 |
| |
296 |
| - | |
| 296 | + | |
297 | 297 |
| |
298 | 298 |
| |
299 | 299 |
| |
| |||
393 | 393 |
| |
394 | 394 |
| |
395 | 395 |
| |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
396 | 403 |
| |
397 | 404 |
| |
398 | 405 |
| |
| |||
405 | 412 |
| |
406 | 413 |
| |
407 | 414 |
| |
408 |
| - | |
| 415 | + | |
| 416 | + | |
409 | 417 |
| |
410 |
| - | |
411 |
| - | |
412 |
| - | |
413 |
| - | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
414 | 439 |
| |
415 | 440 |
| |
416 | 441 |
| |
| |||
420 | 445 |
| |
421 | 446 |
| |
422 | 447 |
| |
423 |
| - | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
424 | 468 |
| |
425 | 469 |
| |
426 |
| - | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
427 | 480 |
| |
428 | 481 |
| |
429 | 482 |
| |
| |||
447 | 500 |
| |
448 | 501 |
| |
449 | 502 |
| |
| 503 | + | |
450 | 504 |
| |
451 |
| - | |
452 |
| - | |
453 |
| - | |
454 |
| - | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
455 | 510 |
| |
456 | 511 |
| |
457 | 512 |
| |
|
Lines changed: 11 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
2771 | 2771 |
| |
2772 | 2772 |
| |
2773 | 2773 |
| |
| 2774 | + | |
| 2775 | + | |
| 2776 | + | |
| 2777 | + | |
| 2778 | + | |
| 2779 | + | |
| 2780 | + | |
| 2781 | + | |
| 2782 | + | |
| 2783 | + | |
| 2784 | + |
Lines changed: 7 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
931 | 931 |
| |
932 | 932 |
| |
933 | 933 |
| |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + |
0 commit comments
Comments
(0)