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.
This commit is contained in:
Neil Conway 2005-04-08 00:59:59 +00:00
parent f53cd94a78
commit eb4b7a0b77
6 changed files with 39 additions and 56 deletions

View File

@ -1,5 +1,5 @@
<!-- <!--
$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
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>

View File

@ -1,5 +1,5 @@
<!-- <!--
$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;
</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> </programlisting>
This works because an implicit <literal>FROM</literal> item is <productname>PostgreSQL</productname> releases prior to
added for each table that is referenced in other parts of the 8.1 would accept queries of this form, and add an implicit entry
<command>SELECT</command> statement but not mentioned in to the query's <literal>FROM</literal> clause for each table
<literal>FROM</literal>. referenced by the query. This is no longer the default behavior,
</para> because it does not comply with the SQL standard, and is
considered by many to be error-prone. For compatibility with
<para> applications that rely on this behavior the <xref
While this is a convenient shorthand, it's easy to misuse. For linkend="guc-add-missing-from"> configuration variable can be
example, the command enabled.
<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>
that he will actually get. To help detect this sort of mistake,
<productname>PostgreSQL</productname> will warn if the
implicit-<literal>FROM</literal> feature is used in a
<command>SELECT</command> statement that also contains an explicit
<literal>FROM</literal> clause. Also, it is possible to disable
the implicit-<literal>FROM</literal> feature by setting the
<xref linkend="guc-add-missing-from"> parameter to false.
</para> </para>
</refsect2> </refsect2>

View File

@ -1,5 +1,5 @@
<!-- <!--
$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;
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
. .

View File

@ -1,5 +1,5 @@
<!-- <!--
$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'
</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>

View File

@ -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[] =
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,

View File

@ -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