diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-07-03 19:07:54 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-07-03 19:07:54 +0000 |
commit | b89140a7eccd0247fa910346da79e701d78a8152 (patch) | |
tree | 4b5e25e4407755598f6f352825ebffcff32db7c8 /src/backend/optimizer/plan/planner.c | |
parent | 455891bf96f6ee3dda9150fe83af2be5e86a572b (diff) |
Do honest transformation and preprocessing of LIMIT/OFFSET clauses,
instead of the former kluge whereby gram.y emitted already-transformed
expressions. This is needed so that Params appearing in these clauses
actually work correctly. I suppose some might claim that the side effect
of 'SELECT ... LIMIT 2+2' working is a new feature, but I say this is
a bug fix.
Diffstat (limited to 'src/backend/optimizer/plan/planner.c')
-rw-r--r-- | src/backend/optimizer/plan/planner.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index f55d0cad5d1..d058a44bb0d 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.155 2003/06/16 02:03:37 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/plan/planner.c,v 1.156 2003/07/03 19:07:20 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -47,7 +47,8 @@ #define EXPRKIND_QUAL 0 #define EXPRKIND_TARGET 1 #define EXPRKIND_RTFUNC 2 -#define EXPRKIND_ININFO 3 +#define EXPRKIND_LIMIT 3 +#define EXPRKIND_ININFO 4 static Node *preprocess_expression(Query *parse, Node *expr, int kind); @@ -232,6 +233,11 @@ subquery_planner(Query *parse, double tuple_fraction) parse->havingQual = preprocess_expression(parse, parse->havingQual, EXPRKIND_QUAL); + parse->limitOffset = preprocess_expression(parse, parse->limitOffset, + EXPRKIND_LIMIT); + parse->limitCount = preprocess_expression(parse, parse->limitCount, + EXPRKIND_LIMIT); + parse->in_info_list = (List *) preprocess_expression(parse, (Node *) parse->in_info_list, EXPRKIND_ININFO); |