Commit eb4b7a0b authored by Neil Conway's avatar Neil Conway

Change the default setting of "add_missing_from" to false. This has been

the long-term plan for this behavior for quite some time, but it is only
possible now that DELETE has a USING clause so that the user can join
other tables in a DELETE statement without relying on this behavior.
parent f53cd94a
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/delete.sgml,v 1.23 2005/04/07 01:51:37 neilc Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/delete.sgml,v 1.24 2005/04/08 00:59:58 neilc Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -148,12 +148,6 @@ DELETE FROM films ...@@ -148,12 +148,6 @@ DELETE FROM films
In some cases the join style is easier to write or faster to In some cases the join style is easier to write or faster to
execute than the sub-select style. execute than the sub-select style.
</para> </para>
<para>
If <varname>add_missing_from</varname> is enabled, any relations
mentioned in the <literal>WHERE</literal> condition will be
implicitly added to the <literal>USING</literal> clause.
</para>
</refsect1> </refsect1>
<refsect1> <refsect1>
......
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.82 2005/03/10 23:21:20 tgl Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/select.sgml,v 1.83 2005/04/08 00:59:58 neilc Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -1011,42 +1011,21 @@ SELECT 2+2; ...@@ -1011,42 +1011,21 @@ SELECT 2+2;
</para> </para>
<para> <para>
A less obvious use is to abbreviate a normal Note that if a <literal>FROM</literal> clause is not specified,
<command>SELECT</command> from tables: the query cannot reference any database tables. For example, the
following query is invalid:
<programlisting> <programlisting>
SELECT distributors.* WHERE distributors.name = 'Westward'; SELECT distributors.* WHERE distributors.name = 'Westward';
did | name
-----+----------
108 | Westward
</programlisting>
This works because an implicit <literal>FROM</literal> item is
added for each table that is referenced in other parts of the
<command>SELECT</command> statement but not mentioned in
<literal>FROM</literal>.
</para>
<para>
While this is a convenient shorthand, it's easy to misuse. For
example, the command
<programlisting>
SELECT distributors.* FROM distributors d;
</programlisting>
is probably a mistake; most likely the user meant
<programlisting>
SELECT d.* FROM distributors d;
</programlisting>
rather than the unconstrained join
<programlisting>
SELECT distributors.* FROM distributors d, distributors distributors;
</programlisting> </programlisting>
that he will actually get. To help detect this sort of mistake, <productname>PostgreSQL</productname> releases prior to
<productname>PostgreSQL</productname> will warn if the 8.1 would accept queries of this form, and add an implicit entry
implicit-<literal>FROM</literal> feature is used in a to the query's <literal>FROM</literal> clause for each table
<command>SELECT</command> statement that also contains an explicit referenced by the query. This is no longer the default behavior,
<literal>FROM</literal> clause. Also, it is possible to disable because it does not comply with the SQL standard, and is
the implicit-<literal>FROM</literal> feature by setting the considered by many to be error-prone. For compatibility with
<xref linkend="guc-add-missing-from"> parameter to false. applications that rely on this behavior the <xref
linkend="guc-add-missing-from"> configuration variable can be
enabled.
</para> </para>
</refsect2> </refsect2>
......
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.37 2005/01/04 03:58:16 tgl Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/show.sgml,v 1.38 2005/04/08 00:59:58 neilc Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -166,7 +166,7 @@ SHOW geqo; ...@@ -166,7 +166,7 @@ SHOW geqo;
SHOW ALL; SHOW ALL;
name | setting name | setting
--------------------------------+---------------------------------------------- --------------------------------+----------------------------------------------
add_missing_from | on add_missing_from | off
archive_command | unset archive_command | unset
australian_timezones | off australian_timezones | off
. .
......
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.312 2005/03/29 03:01:29 tgl Exp $ $PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.313 2005/04/08 00:59:57 neilc Exp $
--> -->
<chapter Id="runtime"> <chapter Id="runtime">
...@@ -3553,15 +3553,25 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' ...@@ -3553,15 +3553,25 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
</indexterm> </indexterm>
<listitem> <listitem>
<para> <para>
When <literal>true</>, tables that are referenced by a query will be When <literal>true</>, tables that are referenced by a query
automatically added to the <literal>FROM</> clause if not already will be automatically added to the <literal>FROM</> clause if
present. The default is <literal>true</> for compatibility with not already present. This behavior does not comply with the
previous releases of <productname>PostgreSQL</>. However, this SQL standard and many people dislike it because it can mask
behavior is not SQL-standard, and many people dislike it because it mistakes (such as referencing a table where you should have
can mask mistakes (such as referencing a table where you should have referenced its alias). The default is <literal>false</>. This
referenced its alias). Set to <literal>false</> for the SQL-standard variable can be enabled for compatibility with releases of
behavior of rejecting references to tables that are not listed in <productname>PostgreSQL</> prior to 8.1, where this behavior
<literal>FROM</>. was allowed by default.
</para>
<para>
Note that even when this variable is enabled, a warning
message will be emitted for each implicit <literal>FROM</>
entry referenced by a query. Users are encouraged to update
their applications to not rely on this behavior, by adding all
tables referenced by a query to the query's <literal>FROM</>
clause (or its <literal>USING</> clause in the case of
<command>DELETE</>).
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>. * Written by Peter Eisentraut <peter_e@gmx.net>.
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.257 2005/03/25 16:17:27 tgl Exp $ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.258 2005/04/08 00:59:59 neilc Exp $
* *
*-------------------------------------------------------------------- *--------------------------------------------------------------------
*/ */
...@@ -791,7 +791,7 @@ static struct config_bool ConfigureNamesBool[] = ...@@ -791,7 +791,7 @@ static struct config_bool ConfigureNamesBool[] =
NULL NULL
}, },
&add_missing_from, &add_missing_from,
true, NULL, NULL false, NULL, NULL
}, },
{ {
{"check_function_bodies", PGC_USERSET, CLIENT_CONN_STATEMENT, {"check_function_bodies", PGC_USERSET, CLIENT_CONN_STATEMENT,
......
...@@ -313,7 +313,7 @@ ...@@ -313,7 +313,7 @@
# - Previous Postgres Versions - # - Previous Postgres Versions -
#add_missing_from = true #add_missing_from = false
#regex_flavor = advanced # advanced, extended, or basic #regex_flavor = advanced # advanced, extended, or basic
#sql_inheritance = true #sql_inheritance = true
#default_with_oids = false #default_with_oids = false
......
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