From eb4b7a0b778ab2e67e43b41822ddae32803a30e3 Mon Sep 17 00:00:00 2001 From: Neil Conway Date: Fri, 8 Apr 2005 00:59:59 +0000 Subject: [PATCH] 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. --- doc/src/sgml/ref/delete.sgml | 8 +---- doc/src/sgml/ref/select.sgml | 47 ++++++++------------------- doc/src/sgml/ref/show.sgml | 4 +-- doc/src/sgml/runtime.sgml | 30 +++++++++++------ src/backend/utils/misc/guc.c | 4 +-- src/backend/utils/misc/postgresql.conf.sample | 2 +- 6 files changed, 39 insertions(+), 56 deletions(-) diff --git a/doc/src/sgml/ref/delete.sgml b/doc/src/sgml/ref/delete.sgml index 954391a228..598936cd5a 100644 --- a/doc/src/sgml/ref/delete.sgml +++ b/doc/src/sgml/ref/delete.sgml @@ -1,5 +1,5 @@ @@ -148,12 +148,6 @@ DELETE FROM films In some cases the join style is easier to write or faster to execute than the sub-select style. - - - If add_missing_from is enabled, any relations - mentioned in the WHERE condition will be - implicitly added to the USING clause. - diff --git a/doc/src/sgml/ref/select.sgml b/doc/src/sgml/ref/select.sgml index 93218e16c2..9044adfa8c 100644 --- a/doc/src/sgml/ref/select.sgml +++ b/doc/src/sgml/ref/select.sgml @@ -1,5 +1,5 @@ @@ -1011,42 +1011,21 @@ SELECT 2+2; - A less obvious use is to abbreviate a normal - SELECT from tables: + Note that if a FROM clause is not specified, + the query cannot reference any database tables. For example, the + following query is invalid: SELECT distributors.* WHERE distributors.name = 'Westward'; - - did | name ------+---------- - 108 | Westward - - This works because an implicit FROM item is - added for each table that is referenced in other parts of the - SELECT statement but not mentioned in - FROM. - - - - While this is a convenient shorthand, it's easy to misuse. For - example, the command - -SELECT distributors.* FROM distributors d; - - is probably a mistake; most likely the user meant - -SELECT d.* FROM distributors d; - - rather than the unconstrained join - -SELECT distributors.* FROM distributors d, distributors distributors; - that he will actually get. To help detect this sort of mistake, - PostgreSQL will warn if the - implicit-FROM feature is used in a - SELECT statement that also contains an explicit - FROM clause. Also, it is possible to disable - the implicit-FROM feature by setting the - parameter to false. + PostgreSQL releases prior to + 8.1 would accept queries of this form, and add an implicit entry + to the query's FROM 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 configuration variable can be + enabled. diff --git a/doc/src/sgml/ref/show.sgml b/doc/src/sgml/ref/show.sgml index 8fb07bc9e4..5fdfa2b4b0 100644 --- a/doc/src/sgml/ref/show.sgml +++ b/doc/src/sgml/ref/show.sgml @@ -1,5 +1,5 @@ @@ -166,7 +166,7 @@ SHOW geqo; SHOW ALL; name | setting --------------------------------+---------------------------------------------- - add_missing_from | on + add_missing_from | off archive_command | unset australian_timezones | off . diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index f019dbb4ae..e5567abf27 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -1,5 +1,5 @@ @@ -3553,15 +3553,25 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir' - When true, tables that are referenced by a query will be - automatically added to the FROM clause if not already - present. The default is true for compatibility with - previous releases of 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 false for the SQL-standard - behavior of rejecting references to tables that are not listed in - FROM. + When true, tables that are referenced by a query + will be automatically added to the 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 false. This + variable can be enabled for compatibility with releases of + PostgreSQL prior to 8.1, where this behavior + was allowed by default. + + + + Note that even when this variable is enabled, a warning + message will be emitted for each implicit 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 FROM + clause (or its USING clause in the case of + DELETE). diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 1db12c2313..4658991e73 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut . * * 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 }, &add_missing_from, - true, NULL, NULL + false, NULL, NULL }, { {"check_function_bodies", PGC_USERSET, CLIENT_CONN_STATEMENT, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 113021fd79..6b06afcb7f 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -313,7 +313,7 @@ # - Previous Postgres Versions - -#add_missing_from = true +#add_missing_from = false #regex_flavor = advanced # advanced, extended, or basic #sql_inheritance = true #default_with_oids = false -- 2.11.0