1
0
mirror of https://github.com/postgres/postgres.git synced 2025-04-27 22:56:53 +03:00

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.
This commit is contained in:
Tom Lane 2014-07-22 13:30:01 -04:00
parent 27cef0a561
commit 27048980f5

View File

@ -2335,7 +2335,7 @@ preprocess_limit(PlannerInfo *root, double tuple_fraction,
{ {
*offset_est = DatumGetInt64(((Const *) est)->constvalue); *offset_est = DatumGetInt64(((Const *) est)->constvalue);
if (*offset_est < 0) if (*offset_est < 0)
*offset_est = 0; /* less than 0 is same as 0 */ *offset_est = 0; /* treat as not present */
} }
} }
else else
@ -2496,9 +2496,8 @@ limit_needed(Query *parse)
{ {
int64 offset = DatumGetInt64(((Const *) node)->constvalue); int64 offset = DatumGetInt64(((Const *) node)->constvalue);
/* Executor would treat less-than-zero same as zero */ if (offset != 0)
if (offset > 0) return true; /* OFFSET with a nonzero value */
return true; /* OFFSET with a positive value */
} }
} }
else else