mirror of
https://github.com/postgres/postgres.git
synced 2025-08-31 17:02:12 +03:00
Prevent invoking I/O conversion casts via functional/attribute notation.
PG 8.4 added a built-in feature for casting pretty much any data type to string types (text, varchar, etc). We allowed this to work in any of the historically-allowed syntaxes: CAST(x AS text), x::text, text(x), or x.text. However, multiple complaints have shown that it's too easy to invoke such casts unintentionally in the latter two styles, particularly field selection. To cure the problem with the narrowest possible change of behavior, disallow use of I/O conversion casts from composite types to string types via functional/attribute syntax. The new functionality is still available via cast syntax. In passing, document the equivalence of functional and attribute syntax in a more visible place.
This commit is contained in:
@@ -1522,6 +1522,19 @@ sqrt(2)
|
||||
The arguments can optionally have names attached.
|
||||
See <xref linkend="sql-syntax-calling-funcs"> for details.
|
||||
</para>
|
||||
|
||||
<note>
|
||||
<para>
|
||||
A function that takes a single argument of composite type can
|
||||
optionally be called using field-selection syntax, and conversely
|
||||
field selection can be written in functional style. That is, the
|
||||
notations <literal>col(table)</> and <literal>table.col</> are
|
||||
interchangeable. This behavior is not SQL-standard but is provided
|
||||
in <productname>PostgreSQL</> because it allows use of functions to
|
||||
emulate <quote>computed fields</>. For more information see
|
||||
<xref linkend="xfunc-sql-composite-functions">.
|
||||
</para>
|
||||
</note>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="syntax-aggregates">
|
||||
|
Reference in New Issue
Block a user