diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2014-07-22 13:30:01 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2014-07-22 13:30:09 -0400 |
commit | 30d6a9858cd8389e59d652d9919761dc095326c5 (patch) | |
tree | fc276221bd9b7d7a2996a64e142a1c54a7b851cd | |
parent | 1ea941450bca70ec9e30c2936e99835f9649f865 (diff) |
Re-enable error for "SELECT ... OFFSET -1".
The executor has thrown errors for negative OFFSET values since 8.4 (see
commit bfce56eea45b1369b7bb2150a150d1ac109f5073), but in a moment of brain
fade I taught the planner that OFFSET with a constant negative value was a
no-op (commit 1a1832eb085e5bca198735e5d0e766a3cb61b8fc). Reinstate the
former behavior by only discarding OFFSET with a value of exactly 0. In
passing, adjust a planner comment that referenced the ancient behavior.
Back-patch to 9.3 where the mistake was introduced.
-rw-r--r-- | src/backend/optimizer/plan/planner.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 0f1e2e46802..8e3a9068f1f 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -2334,7 +2334,7 @@ preprocess_limit(PlannerInfo *root, double tuple_fraction, { *offset_est = DatumGetInt64(((Const *) est)->constvalue); if (*offset_est < 0) - *offset_est = 0; /* less than 0 is same as 0 */ + *offset_est = 0; /* treat as not present */ } } else @@ -2495,9 +2495,8 @@ limit_needed(Query *parse) { int64 offset = DatumGetInt64(((Const *) node)->constvalue); - /* Executor would treat less-than-zero same as zero */ - if (offset > 0) - return true; /* OFFSET with a positive value */ + if (offset != 0) + return true; /* OFFSET with a nonzero value */ } } else |