git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 27cef0a)
Re-enable error for "SELECT ... OFFSET -1".
2014年7月22日 17:30:01 +0000 (13:30 -0400)
2014年7月22日 17:30:01 +0000 (13:30 -0400)
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.


diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index f2c9c99b7f69edac124615acc8dc92d0f872e5a8..e1480cda2470cc09cdd9358e03ac403df01babc5 100644 (file)
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -2335,7 +2335,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
@@ -2496,9 +2496,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
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /