]> granicus.if.org Git - postgresql/commitdiff
Remove ancient restriction that LIMIT/OFFSET can't contain a sub-select.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 15 Feb 2008 17:19:46 +0000 (17:19 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 15 Feb 2008 17:19:46 +0000 (17:19 +0000)
This was probably protecting some implementation limitation when it was
put in, but as far as I can tell the planner and executor have no such
assumption anymore; the case seems to work fine.  Per a gripe from
Grzegorz Jaskiewicz.

src/backend/parser/parse_clause.c

index 9fce0f66299cd02e3775042573dc37db1d02b44f..e5a23aaa44568d8230c15290135a3ba4cbee3d90 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.168 2008/01/01 19:45:50 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/parser/parse_clause.c,v 1.169 2008/02/15 17:19:46 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1091,9 +1091,7 @@ transformLimitClause(ParseState *pstate, Node *clause,
        qual = coerce_to_specific_type(pstate, qual, INT8OID, constructName);
 
        /*
-        * LIMIT can't refer to any vars or aggregates of the current query; we
-        * don't allow subselects either (though that case would at least be
-        * sensible)
+        * LIMIT can't refer to any vars or aggregates of the current query
         */
        if (contain_vars_of_level(qual, 0))
        {
@@ -1111,14 +1109,6 @@ transformLimitClause(ParseState *pstate, Node *clause,
                                 errmsg("argument of %s must not contain aggregates",
                                                constructName)));
        }
-       if (contain_subplans(qual))
-       {
-               ereport(ERROR,
-                               (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
-               /* translator: %s is name of a SQL construct, eg LIMIT */
-                                errmsg("argument of %s must not contain subqueries",
-                                               constructName)));
-       }
 
        return qual;
 }