add_missing_from = false - Mailing list pgsql-patches
From | Neil Conway |
---|---|
Subject | add_missing_from = false |
Date | |
Msg-id | 4254DB7A.1020608@samurai.com Whole thread Raw |
Responses |
Re: add_missing_from = false
|
List | pgsql-patches |
Now that DELETE has a USING clause, we should be able to make add_missing_from=false the default in 8.1; the attached patch implements this and updates the documentation. Barring any objections, I'll apply this tomorrow. -Neil Index: doc/src/sgml/runtime.sgml =================================================================== RCS file: /var/lib/cvs/pgsql/doc/src/sgml/runtime.sgml,v retrieving revision 1.312 diff -c -r1.312 runtime.sgml *** doc/src/sgml/runtime.sgml 29 Mar 2005 03:01:29 -0000 1.312 --- doc/src/sgml/runtime.sgml 7 Apr 2005 07:02:30 -0000 *************** *** 3553,3567 **** </indexterm> <listitem> <para> ! When <literal>true</>, tables that are referenced by a query will be ! automatically added to the <literal>FROM</> clause if not already ! present. The default is <literal>true</> for compatibility with ! previous releases of <productname>PostgreSQL</>. However, this ! behavior is not SQL-standard, and many people dislike it because it ! can mask mistakes (such as referencing a table where you should have ! referenced its alias). Set to <literal>false</> for the SQL-standard ! behavior of rejecting references to tables that are not listed in ! <literal>FROM</>. </para> </listitem> </varlistentry> --- 3553,3577 ---- </indexterm> <listitem> <para> ! When <literal>true</>, tables that are referenced by a query ! will be automatically added to the <literal>FROM</> clause if ! not already present. This behavior does not comply with the ! SQL standard and many people dislike it because it can mask ! mistakes (such as referencing a table where you should have ! referenced its alias). The default is <literal>false</>. This ! variable can be enabled for compatibility with releases of ! <productname>PostgreSQL</> prior to 8.1, where this behavior ! 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> </listitem> </varlistentry> Index: doc/src/sgml/ref/delete.sgml =================================================================== RCS file: /var/lib/cvs/pgsql/doc/src/sgml/ref/delete.sgml,v retrieving revision 1.23 diff -c -r1.23 delete.sgml *** doc/src/sgml/ref/delete.sgml 7 Apr 2005 01:51:37 -0000 1.23 --- doc/src/sgml/ref/delete.sgml 7 Apr 2005 06:30:31 -0000 *************** *** 148,159 **** In some cases the join style is easier to write or faster to execute than the sub-select style. </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> --- 148,153 ---- Index: doc/src/sgml/ref/select.sgml =================================================================== RCS file: /var/lib/cvs/pgsql/doc/src/sgml/ref/select.sgml,v retrieving revision 1.82 diff -c -r1.82 select.sgml *** doc/src/sgml/ref/select.sgml 10 Mar 2005 23:21:20 -0000 1.82 --- doc/src/sgml/ref/select.sgml 7 Apr 2005 06:12:25 -0000 *************** *** 1011,1052 **** </para> <para> ! A less obvious use is to abbreviate a normal ! <command>SELECT</command> from tables: <programlisting> 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> ! 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> </refsect2> --- 1011,1031 ---- </para> <para> ! Note that if a <literal>FROM</literal> clause is not specified, ! the query cannot reference any database tables. For example, the ! following query is invalid: <programlisting> SELECT distributors.* WHERE distributors.name = 'Westward'; </programlisting> ! <productname>PostgreSQL</productname> releases prior to ! 8.1 would accept queries of this form, and add an implicit entry ! to the query's <literal>FROM</literal> clause for each table ! referenced by the query. This is no longer the default behavior, ! because it does not comply with the SQL standard, and is ! considered by many to be error-prone. For compatibility with ! applications that rely on this behavior the <xref ! linkend="guc-add-missing-from"> configuration variable can be ! enabled. </para> </refsect2> Index: doc/src/sgml/ref/show.sgml =================================================================== RCS file: /var/lib/cvs/pgsql/doc/src/sgml/ref/show.sgml,v retrieving revision 1.37 diff -c -r1.37 show.sgml *** doc/src/sgml/ref/show.sgml 4 Jan 2005 03:58:16 -0000 1.37 --- doc/src/sgml/ref/show.sgml 7 Apr 2005 05:37:12 -0000 *************** *** 166,172 **** SHOW ALL; name | setting --------------------------------+---------------------------------------------- ! add_missing_from | on archive_command | unset australian_timezones | off . --- 166,172 ---- SHOW ALL; name | setting --------------------------------+---------------------------------------------- ! add_missing_from | off archive_command | unset australian_timezones | off . Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /var/lib/cvs/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.257 diff -c -r1.257 guc.c *** src/backend/utils/misc/guc.c 25 Mar 2005 16:17:27 -0000 1.257 --- src/backend/utils/misc/guc.c 7 Apr 2005 05:34:40 -0000 *************** *** 791,797 **** NULL }, &add_missing_from, ! true, NULL, NULL }, { {"check_function_bodies", PGC_USERSET, CLIENT_CONN_STATEMENT, --- 791,797 ---- NULL }, &add_missing_from, ! false, NULL, NULL }, { {"check_function_bodies", PGC_USERSET, CLIENT_CONN_STATEMENT, Index: src/backend/utils/misc/postgresql.conf.sample =================================================================== RCS file: /var/lib/cvs/pgsql/src/backend/utils/misc/postgresql.conf.sample,v retrieving revision 1.138 diff -c -r1.138 postgresql.conf.sample *** src/backend/utils/misc/postgresql.conf.sample 24 Mar 2005 04:36:18 -0000 1.138 --- src/backend/utils/misc/postgresql.conf.sample 7 Apr 2005 05:35:04 -0000 *************** *** 313,319 **** # - Previous Postgres Versions - ! #add_missing_from = true #regex_flavor = advanced # advanced, extended, or basic #sql_inheritance = true #default_with_oids = false --- 313,319 ---- # - Previous Postgres Versions - ! #add_missing_from = false #regex_flavor = advanced # advanced, extended, or basic #sql_inheritance = true #default_with_oids = false
pgsql-patches by date: