aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2014-07-22 13:30:01 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2014-07-22 13:30:14 -0400
commit6306d07122d8b6678f47c273165540de02a0d242 (patch)
tree1598a69d5b07d7faa498b995752569dffb9e3c68 /src
parentf59c8eff7dd3dea4116a34e1890ee219f6d7f8d5 (diff)
downloadpostgresql-6306d07122d8b6678f47c273165540de02a0d242.tar.gz
postgresql-6306d07122d8b6678f47c273165540de02a0d242.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/plan/planner.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index 686e176e703..c19364e0018 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -2127,7 +2127,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
@@ -2288,9 +2288,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