Commit 1aab783b authored by Bruce Momjian's avatar Bruce Momjian

Implement TODO item:

	* Change LIMIT val,val to offset,limit to match MySQL

Documentation updates too.
parent ddfdb1e3
...@@ -74,10 +74,10 @@ TYPES ...@@ -74,10 +74,10 @@ TYPES
o Allow nulls in arrays o Allow nulls in arrays
o Allow arrays to be ORDER'ed o Allow arrays to be ORDER'ed
o fix array handling in ECPG o fix array handling in ECPG
BINARY DATA lfBINARY DATA
o -Add non-large-object binary field (already exists -- bytea) o -Add non-large-object binary field (already exists -- bytea)
o -Make binary interface for TOAST columns (base64) o -Make binary interface for TOAST columns (base64)
o Improve vacuum of large objects (/contrib/vacuumlo) o Improve vacuum of large objects, like /contrib/vacuumlo
o Add security checking for large objects o Add security checking for large objects
o Make file in/out interface for TOAST columns, similar to large object o Make file in/out interface for TOAST columns, similar to large object
interface (force out-of-line storage and no compression) interface (force out-of-line storage and no compression)
...@@ -105,7 +105,7 @@ INDEXES ...@@ -105,7 +105,7 @@ INDEXES
* Allow CREATE INDEX zman_index ON test (date_trunc( 'day', zman ) datetime_ops) * Allow CREATE INDEX zman_index ON test (date_trunc( 'day', zman ) datetime_ops)
fails index can't store constant parameters fails index can't store constant parameters
* Add FILLFACTOR to index creation * Add FILLFACTOR to index creation
* Order duplicate index entries by tid * Order duplicate index entries by tid for faster heap lookups
* -Re-enable partial indexes * -Re-enable partial indexes
* -Prevent pg_attribute from having duplicate oids for indexes (Tom) * -Prevent pg_attribute from having duplicate oids for indexes (Tom)
* Allow inherited tables to inherit index, UNIQUE constraint, and primary * Allow inherited tables to inherit index, UNIQUE constraint, and primary
...@@ -124,7 +124,7 @@ INDEXES ...@@ -124,7 +124,7 @@ INDEXES
non-consecutive keys or OR clauses, so fewer heap accesses non-consecutive keys or OR clauses, so fewer heap accesses
* Allow SELECT * FROM tab WHERE int2col = 4 to use int2col index, int8, * Allow SELECT * FROM tab WHERE int2col = 4 to use int2col index, int8,
float4, numeric/decimal too [optimizer] float4, numeric/decimal too [optimizer]
* Use indexes with CIDR '<<' (contains) operator * -Use indexes with CIDR '<<' (contains) operator
* Allow LIKE indexing optimization for non-ASCII locales * Allow LIKE indexing optimization for non-ASCII locales
* Be smarter about insertion of already-ordered data into btree index * Be smarter about insertion of already-ordered data into btree index
* -Gather more accurate dispersion statistics using indexes (Tom) * -Gather more accurate dispersion statistics using indexes (Tom)
......
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/select.sgml,v 1.46 2001/09/14 10:28:09 ishii Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/ref/select.sgml,v 1.47 2001/09/23 03:39:01 momjian Exp $
Postgres documentation Postgres documentation
--> -->
...@@ -29,7 +29,8 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression</replac ...@@ -29,7 +29,8 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression</replac
[ { UNION | INTERSECT | EXCEPT [ ALL ] } <replaceable class="PARAMETER">select</replaceable> ] [ { UNION | INTERSECT | EXCEPT [ ALL ] } <replaceable class="PARAMETER">select</replaceable> ]
[ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ] [ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ]
[ FOR UPDATE [ OF <replaceable class="PARAMETER">tablename</replaceable> [, ...] ] ] [ FOR UPDATE [ OF <replaceable class="PARAMETER">tablename</replaceable> [, ...] ] ]
[ LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } [ { OFFSET | , } <replaceable class="PARAMETER">start</replaceable> ]] [ LIMIT [ <replaceable class="PARAMETER">start</replaceable> , ] { <replaceable class="PARAMETER">count</replaceable> | ALL } ]
[ OFFSET <replaceable class="PARAMETER">start</replaceable> ]
where <replaceable class="PARAMETER">from_item</replaceable> can be: where <replaceable class="PARAMETER">from_item</replaceable> can be:
...@@ -613,7 +614,8 @@ SELECT name FROM distributors ORDER BY code; ...@@ -613,7 +614,8 @@ SELECT name FROM distributors ORDER BY code;
<synopsis> <synopsis>
<replaceable class="PARAMETER">table_query</replaceable> UNION [ ALL ] <replaceable class="PARAMETER">table_query</replaceable> <replaceable class="PARAMETER">table_query</replaceable> UNION [ ALL ] <replaceable class="PARAMETER">table_query</replaceable>
[ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ] [ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ]
[ LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } [ { OFFSET | , } <replaceable class="PARAMETER">start</replaceable> ]] [ LIMIT [ <replaceable class="PARAMETER">start</replaceable> , ] { <replaceable class="PARAMETER">count</replaceable> | ALL } ]
[ OFFSET <replaceable class="PARAMETER">start</replaceable> ]
</synopsis> </synopsis>
where where
...@@ -662,7 +664,8 @@ SELECT name FROM distributors ORDER BY code; ...@@ -662,7 +664,8 @@ SELECT name FROM distributors ORDER BY code;
<synopsis> <synopsis>
<replaceable class="PARAMETER">table_query</replaceable> INTERSECT [ ALL ] <replaceable class="PARAMETER">table_query</replaceable> <replaceable class="PARAMETER">table_query</replaceable> INTERSECT [ ALL ] <replaceable class="PARAMETER">table_query</replaceable>
[ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ] [ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ]
[ LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } [ { OFFSET | , } <replaceable class="PARAMETER">start</replaceable> ]] [ LIMIT [ <replaceable class="PARAMETER">start</replaceable> , ] { <replaceable class="PARAMETER">count</replaceable> | ALL } ]
[ OFFSET <replaceable class="PARAMETER">start</replaceable> ]
</synopsis> </synopsis>
where where
...@@ -702,7 +705,8 @@ SELECT name FROM distributors ORDER BY code; ...@@ -702,7 +705,8 @@ SELECT name FROM distributors ORDER BY code;
<synopsis> <synopsis>
<replaceable class="PARAMETER">table_query</replaceable> EXCEPT [ ALL ] <replaceable class="PARAMETER">table_query</replaceable> <replaceable class="PARAMETER">table_query</replaceable> EXCEPT [ ALL ] <replaceable class="PARAMETER">table_query</replaceable>
[ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ] [ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ]
[ LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } [ { OFFSET | , } <replaceable class="PARAMETER">start</replaceable> ]] [ LIMIT [ <replaceable class="PARAMETER">start</replaceable> , ] { <replaceable class="PARAMETER">count</replaceable> | ALL } ]
[ OFFSET <replaceable class="PARAMETER">start</replaceable> ]
</synopsis> </synopsis>
where where
...@@ -738,7 +742,7 @@ SELECT name FROM distributors ORDER BY code; ...@@ -738,7 +742,7 @@ SELECT name FROM distributors ORDER BY code;
</title> </title>
<para> <para>
<synopsis> <synopsis>
LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } [ { OFFSET | , } <replaceable class="PARAMETER">start</replaceable> ] LIMIT [ <replaceable class="PARAMETER">start</replaceable> , ] { <replaceable class="PARAMETER">count</replaceable> | ALL }
OFFSET <replaceable class="PARAMETER">start</replaceable> OFFSET <replaceable class="PARAMETER">start</replaceable>
</synopsis> </synopsis>
...@@ -761,14 +765,14 @@ SELECT name FROM distributors ORDER BY code; ...@@ -761,14 +765,14 @@ SELECT name FROM distributors ORDER BY code;
constrains the result rows into a unique order. Otherwise you will get constrains the result rows into a unique order. Otherwise you will get
an unpredictable subset of the query's rows---you may be asking for an unpredictable subset of the query's rows---you may be asking for
the tenth through twentieth rows, but tenth through twentieth in what the tenth through twentieth rows, but tenth through twentieth in what
ordering? You don't know what ordering, unless you specified ORDER BY. ordering? You don't know what ordering unless you specify ORDER BY.
</para> </para>
<para> <para>
As of <productname>Postgres</productname> 7.0, the As of <productname>Postgres</productname> 7.0, the
query optimizer takes LIMIT into account when generating a query plan, query optimizer takes LIMIT into account when generating a query plan,
so you are very likely to get different plans (yielding different row so you are very likely to get different plans (yielding different row
orders) depending on what you give for LIMIT and OFFSET. Thus, using orders) depending on what you use for LIMIT and OFFSET. Thus, using
different LIMIT/OFFSET values to select different subsets of a query different LIMIT/OFFSET values to select different subsets of a query
result <emphasis>will give inconsistent results</emphasis> unless result <emphasis>will give inconsistent results</emphasis> unless
you enforce a predictable result ordering with ORDER BY. This is not you enforce a predictable result ordering with ORDER BY. This is not
......
<!-- <!--
$Header: /cvsroot/pgsql/doc/src/sgml/sql.sgml,v 1.21 2001/05/22 16:00:00 petere Exp $ $Header: /cvsroot/pgsql/doc/src/sgml/sql.sgml,v 1.22 2001/09/23 03:39:01 momjian Exp $
--> -->
<chapter id="sql"> <chapter id="sql">
...@@ -864,7 +864,8 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression</replac ...@@ -864,7 +864,8 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="PARAMETER">expression</replac
[ { UNION | INTERSECT | EXCEPT [ ALL ] } <replaceable class="PARAMETER">select</replaceable> ] [ { UNION | INTERSECT | EXCEPT [ ALL ] } <replaceable class="PARAMETER">select</replaceable> ]
[ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ] [ ORDER BY <replaceable class="PARAMETER">expression</replaceable> [ ASC | DESC | USING <replaceable class="PARAMETER">operator</replaceable> ] [, ...] ]
[ FOR UPDATE [ OF <replaceable class="PARAMETER">class_name</replaceable> [, ...] ] ] [ FOR UPDATE [ OF <replaceable class="PARAMETER">class_name</replaceable> [, ...] ] ]
[ LIMIT { <replaceable class="PARAMETER">count</replaceable> | ALL } [ { OFFSET | , } <replaceable class="PARAMETER">start</replaceable> ]] [ LIMIT [ <replaceable class="PARAMETER">start</replaceable> , ] { <replaceable class="PARAMETER">count</replaceable> | ALL } ]
[ OFFSET <replaceable class="PARAMETER">start</replaceable> ]
</synopsis> </synopsis>
</para> </para>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.252 2001/09/20 14:20:27 petere Exp $ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.253 2001/09/23 03:39:01 momjian Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -3587,8 +3587,8 @@ OptUseOp: USING all_Op { $$ = $2; } ...@@ -3587,8 +3587,8 @@ OptUseOp: USING all_Op { $$ = $2; }
; ;
select_limit: LIMIT select_limit_value ',' select_offset_value select_limit: LIMIT select_offset_value ',' select_limit_value
{ $$ = makeList2($4, $2); } { $$ = makeList2($2, $4); }
| LIMIT select_limit_value OFFSET select_offset_value | LIMIT select_limit_value OFFSET select_offset_value
{ $$ = makeList2($4, $2); } { $$ = makeList2($4, $2); }
| LIMIT select_limit_value | LIMIT select_limit_value
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment