mirror of
https://github.com/postgres/postgres.git
synced 2025-12-21 05:21:08 +03:00
Add SQL Standard WITH ORDINALITY support for UNNEST (and any other SRF)
Author: Andrew Gierth, David Fetter Reviewers: Dean Rasheed, Jeevan Chalke, Stephen Frost
This commit is contained in:
@@ -52,7 +52,8 @@ SELECT [ ALL | DISTINCT [ ON ( <replaceable class="parameter">expression</replac
|
||||
[ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ] [ [ AS ] <replaceable class="parameter">alias</replaceable> [ ( <replaceable class="parameter">column_alias</replaceable> [, ...] ) ] ]
|
||||
[ LATERAL ] ( <replaceable class="parameter">select</replaceable> ) [ AS ] <replaceable class="parameter">alias</replaceable> [ ( <replaceable class="parameter">column_alias</replaceable> [, ...] ) ]
|
||||
<replaceable class="parameter">with_query_name</replaceable> [ [ AS ] <replaceable class="parameter">alias</replaceable> [ ( <replaceable class="parameter">column_alias</replaceable> [, ...] ) ] ]
|
||||
[ LATERAL ] <replaceable class="parameter">function_name</replaceable> ( [ <replaceable class="parameter">argument</replaceable> [, ...] ] ) [ AS ] <replaceable class="parameter">alias</replaceable> [ ( <replaceable class="parameter">column_alias</replaceable> [, ...] | <replaceable class="parameter">column_definition</replaceable> [, ...] ) ]
|
||||
[ LATERAL ] <replaceable class="parameter">function_name</replaceable> ( [ <replaceable class="parameter">argument</replaceable> [, ...] ] ) [ WITH ORDINALITY ] [ [ AS ] <replaceable class="parameter">alias</replaceable> [ ( <replaceable class="parameter">column_alias</replaceable> [, ...] ) ] ]
|
||||
[ LATERAL ] <replaceable class="parameter">function_name</replaceable> ( [ <replaceable class="parameter">argument</replaceable> [, ...] ] ) [ AS ] <replaceable class="parameter">alias</replaceable> ( <replaceable class="parameter">column_definition</replaceable> [, ...] )
|
||||
[ LATERAL ] <replaceable class="parameter">function_name</replaceable> ( [ <replaceable class="parameter">argument</replaceable> [, ...] ] ) AS ( <replaceable class="parameter">column_definition</replaceable> [, ...] )
|
||||
<replaceable class="parameter">from_item</replaceable> [ NATURAL ] <replaceable class="parameter">join_type</replaceable> <replaceable class="parameter">from_item</replaceable> [ ON <replaceable class="parameter">join_condition</replaceable> | USING ( <replaceable class="parameter">join_column</replaceable> [, ...] ) ]
|
||||
|
||||
@@ -368,18 +369,40 @@ TABLE [ ONLY ] <replaceable class="parameter">table_name</replaceable> [ * ]
|
||||
clause. (This is especially useful for functions that return
|
||||
result sets, but any function can be used.) This acts as
|
||||
though its output were created as a temporary table for the
|
||||
duration of this single <command>SELECT</command> command. An
|
||||
alias can also be used. If an alias is written, a column alias
|
||||
list can also be written to provide substitute names for one
|
||||
or more attributes of the function's composite return type. If
|
||||
the function has been defined as returning the <type>record</>
|
||||
data type, then an alias or the key word <literal>AS</> must
|
||||
be present, followed by a column definition list in the form
|
||||
<literal>( <replaceable
|
||||
duration of this single <command>SELECT</command> command.
|
||||
When the optional <command>WITH ORDINALITY</command> is
|
||||
appended to the function call, a new column is appended after
|
||||
all the function call's columns with numbering for each row.
|
||||
For example:
|
||||
<programlisting>
|
||||
SELECT * FROM unnest(ARRAY['a','b','c','d','e','f']) WITH ORDINALITY;
|
||||
unnest | ordinality
|
||||
--------+----------
|
||||
a | 1
|
||||
b | 2
|
||||
c | 3
|
||||
d | 4
|
||||
e | 5
|
||||
f | 6
|
||||
(6 rows)
|
||||
</programlisting>
|
||||
An alias can also be used. If an alias is written, a column
|
||||
alias list can also be written to provide substitute names for
|
||||
one or more attributes of the function's composite return
|
||||
type, including the column added by <literal>ORDINALITY</literal>
|
||||
if present.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If the function has been defined as returning the
|
||||
<type>record</> data type, then an alias or the key word
|
||||
<literal>AS</> must be present, followed by a column
|
||||
definition list in the form <literal>( <replaceable
|
||||
class="parameter">column_name</replaceable> <replaceable
|
||||
class="parameter">data_type</replaceable> <optional>, ... </>
|
||||
)</literal>. The column definition list must match the actual
|
||||
number and types of columns returned by the function.
|
||||
class="parameter">data_type</replaceable> <optional>, ...
|
||||
</>)</literal>. The column definition list must match the
|
||||
actual number and types of columns returned by the function.
|
||||
<literal>ORDINALITY</literal> does not work in this case.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
Reference in New Issue
Block a user