Modify planner's implied-equality-deduction code so that when a set
of known-equal expressions includes any constant expressions (including Params from outer queries), we actively suppress any 'var = var' clauses that are or could be deduced from the set, generating only the deducible 'var = const' clauses instead. The idea here is to push down the restrictions implied by the equality set to base relations whenever possible. Once we have applied the 'var = const' clauses, the 'var = var' clauses are redundant, and should be suppressed both to save work at execution and to avoid double-counting restrictivity.
Showing
- src/backend/nodes/list.c 17 additions, 1 deletionsrc/backend/nodes/list.c
- src/backend/optimizer/path/indxpath.c 6 additions, 4 deletionssrc/backend/optimizer/path/indxpath.c
- src/backend/optimizer/path/pathkeys.c 111 additions, 10 deletionssrc/backend/optimizer/path/pathkeys.c
- src/backend/optimizer/plan/initsplan.c 94 additions, 134 deletionssrc/backend/optimizer/plan/initsplan.c
- src/backend/optimizer/util/joininfo.c 109 additions, 1 deletionsrc/backend/optimizer/util/joininfo.c
- src/backend/optimizer/util/relnode.c 9 additions, 4 deletionssrc/backend/optimizer/util/relnode.c
- src/backend/optimizer/util/restrictinfo.c 25 additions, 3 deletionssrc/backend/optimizer/util/restrictinfo.c
- src/backend/utils/adt/selfuncs.c 2 additions, 2 deletionssrc/backend/utils/adt/selfuncs.c
- src/include/nodes/pg_list.h 2 additions, 1 deletionsrc/include/nodes/pg_list.h
- src/include/optimizer/joininfo.h 11 additions, 3 deletionssrc/include/optimizer/joininfo.h
- src/include/optimizer/paths.h 3 additions, 1 deletionsrc/include/optimizer/paths.h
- src/include/optimizer/planmain.h 6 additions, 4 deletionssrc/include/optimizer/planmain.h
Loading
Please register or sign in to comment