Behavior of "OFFSET -1"

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-hackers(at)postgreSQL(dot)org
Subject: Behavior of "OFFSET -1"
Date: 2014-07-22 16:49:37
Message-ID: 28520.1406047777@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Before 9.3, you got an error from this:

regression=# select * from tenk1 offset -1;
ERROR: OFFSET must not be negative

But 9.3 and up ignore the negative OFFSET. This seems to be a thinko in
my commit 1a1832eb. limit_needed() thinks it can discard the Limit plan
node altogether, which of course prevents nodeLimit.c from complaining:

/* Executor would treat less-than-zero same as zero */
if (offset > 0)
return true; /* OFFSET with a positive value */

I don't recall the reasoning behind that comment for sure, but I imagine
I examined the behavior of ExecLimit() and failed to notice that there
was an error check in recompute_limits().

This seems to me to be a clear bug: we should reinstate the former
behavior by tightening this check so it only discards OFFSET with a
constant value of exactly 0. Anyone think differently?

regards, tom lane

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2014-07-22 16:51:07 Re: Some bogus results from prairiedog
Previous Message Tom Lane 2014-07-22 15:51:18 Re: [COMMITTERS] pgsql: Diagnose incompatible OpenLDAP versions during build and test.