-
- Downloads
Implement subselects in target lists. Also, relax requirement that
subselects can only appear on the righthand side of a binary operator. That's still true for quantified predicates like x = ANY (SELECT ...), but a subselect that delivers a single result can now appear anywhere in an expression. This is implemented by changing EXPR_SUBLINK sublinks to represent just the (SELECT ...) expression, without any 'left hand side' or combining operator --- so they're now more like EXISTS_SUBLINK. To handle the case of '(x, y, z) = (SELECT ...)', I added a new sublink type MULTIEXPR_SUBLINK, which acts just like EXPR_SUBLINK used to. But the grammar will only generate one for a multiple-left-hand-side row expression.
Showing
- src/backend/executor/nodeSubplan.c 45 additions, 25 deletionssrc/backend/executor/nodeSubplan.c
- src/backend/nodes/copyfuncs.c 8 additions, 6 deletionssrc/backend/nodes/copyfuncs.c
- src/backend/optimizer/plan/planmain.c 17 additions, 1 deletionsrc/backend/optimizer/plan/planmain.c
- src/backend/optimizer/plan/planner.c 3 additions, 9 deletionssrc/backend/optimizer/plan/planner.c
- src/backend/optimizer/plan/subselect.c 68 additions, 64 deletionssrc/backend/optimizer/plan/subselect.c
- src/backend/parser/analyze.c 5 additions, 2 deletionssrc/backend/parser/analyze.c
- src/backend/parser/gram.y 44 additions, 343 deletionssrc/backend/parser/gram.y
- src/backend/parser/parse_expr.c 35 additions, 12 deletionssrc/backend/parser/parse_expr.c
- src/backend/rewrite/rewriteHandler.c 78 additions, 76 deletionssrc/backend/rewrite/rewriteHandler.c
- src/backend/utils/adt/ruleutils.c 22 additions, 8 deletionssrc/backend/utils/adt/ruleutils.c
- src/include/nodes/plannodes.h 3 additions, 3 deletionssrc/include/nodes/plannodes.h
- src/include/nodes/primnodes.h 27 additions, 8 deletionssrc/include/nodes/primnodes.h
Loading
Please register or sign in to comment