pgsql: RESET SESSION, plus related new DDL commands.

Started by Nonamealmost 19 years ago3 messages
#1Noname
neilc@postgresql.org

Log Message:
-----------
RESET SESSION, plus related new DDL commands. Patch from Marko Kreen,
reviewed by Neil Conway. This patch adds the following DDL command
variants: RESET SESSION, RESET TEMP, RESET PLANS, CLOSE ALL, and
DEALLOCATE ALL. RESET SESSION is intended for use by connection
pool software and the like, in order to reset a client session
to something close to its initial state.

Note that while most of these command variants can be executed
inside a transaction block (but are not transaction-aware!),
RESET SESSION cannot. While this is inconsistent, it is intended
to catch programmer mistakes: RESET SESSION in an open transaction
block is probably unintended.

Modified Files:
--------------
pgsql/doc/src/sgml/ref:
close.sgml (r1.24 -> r1.25)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/ref/close.sgml.diff?r1=1.24&r2=1.25)
deallocate.sgml (r1.9 -> r1.10)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/ref/deallocate.sgml.diff?r1=1.9&r2=1.10)
reset.sgml (r1.32 -> r1.33)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/ref/reset.sgml.diff?r1=1.32&r2=1.33)
pgsql/src/backend/catalog:
namespace.c (r1.93 -> r1.94)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/namespace.c.diff?r1=1.93&r2=1.94)
pgsql/src/backend/commands:
async.c (r1.135 -> r1.136)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/async.c.diff?r1=1.135&r2=1.136)
portalcmds.c (r1.62 -> r1.63)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/portalcmds.c.diff?r1=1.62&r2=1.63)
prepare.c (r1.70 -> r1.71)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/prepare.c.diff?r1=1.70&r2=1.71)
pgsql/src/backend/parser:
gram.y (r2.587 -> r2.588)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/parser/gram.y.diff?r1=2.587&r2=2.588)
pgsql/src/backend/tcop:
utility.c (r1.276 -> r1.277)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/tcop/utility.c.diff?r1=1.276&r2=1.277)
pgsql/src/backend/utils/cache:
plancache.c (r1.5 -> r1.6)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/plancache.c.diff?r1=1.5&r2=1.6)
pgsql/src/backend/utils/misc:
guc.c (r1.383 -> r1.384)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/misc/guc.c.diff?r1=1.383&r2=1.384)
pgsql/src/backend/utils/mmgr:
portalmem.c (r1.100 -> r1.101)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mmgr/portalmem.c.diff?r1=1.100&r2=1.101)
pgsql/src/include/catalog:
namespace.h (r1.45 -> r1.46)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/catalog/namespace.h.diff?r1=1.45&r2=1.46)
pgsql/src/include/commands:
async.h (r1.34 -> r1.35)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/async.h.diff?r1=1.34&r2=1.35)
prepare.h (r1.25 -> r1.26)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/commands/prepare.h.diff?r1=1.25&r2=1.26)
pgsql/src/include/nodes:
parsenodes.h (r1.344 -> r1.345)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/parsenodes.h.diff?r1=1.344&r2=1.345)
pgsql/src/include/utils:
guc.h (r1.80 -> r1.81)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/guc.h.diff?r1=1.80&r2=1.81)
plancache.h (r1.4 -> r1.5)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/plancache.h.diff?r1=1.4&r2=1.5)
portal.h (r1.74 -> r1.75)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/portal.h.diff?r1=1.74&r2=1.75)
pgsql/src/test/regress/expected:
guc.out (r1.2 -> r1.3)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/guc.out.diff?r1=1.2&r2=1.3)
portals.out (r1.11 -> r1.12)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/portals.out.diff?r1=1.11&r2=1.12)
prepare.out (r1.12 -> r1.13)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/prepare.out.diff?r1=1.12&r2=1.13)
pgsql/src/test/regress/sql:
guc.sql (r1.2 -> r1.3)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/guc.sql.diff?r1=1.2&r2=1.3)
portals.sql (r1.8 -> r1.9)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/portals.sql.diff?r1=1.8&r2=1.9)
prepare.sql (r1.4 -> r1.5)
(http://developer.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/prepare.sql.diff?r1=1.4&r2=1.5)

#2Alvaro Herrera
alvherre@commandprompt.com
In reply to: Noname (#1)
Re: [COMMITTERS] pgsql: RESET SESSION, plus related new DDL commands.

Neil Conway wrote:

Log Message:
-----------
RESET SESSION, plus related new DDL commands.

This phrase is missing a verb:

The default value is defined as the value that the parameter would
have had, if no <command>SET</> ever been issued for it in the
current session.

/pgsql/doc/src/sgml/ref/reset.sgml

I find this markup strange:

<synopsis>
SET SESSION AUTHORIZATION DEFAULT;
RESET ALL;
DEALLOCATE ALL;
CLOSE ALL;
UNLISTEN *;
RESET PLANS;
RESET TEMP;
</synopsis>

shouldn't it be using <programlisting> ?

In ResetTempTableNamespace(void), shouldn't it be using myTempNamespace
instead of the SysCache lookup?

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#3Neil Conway
neilc@samurai.com
In reply to: Alvaro Herrera (#2)
1 attachment(s)
Re: [COMMITTERS] pgsql: RESET SESSION, plus related new DDL commands.

On Thu, 2007-04-12 at 11:45 -0400, Alvaro Herrera wrote:

This phrase is missing a verb:
[...]
I find this markup strange:
[...]
In ResetTempTableNamespace(void), shouldn't it be using myTempNamespace
instead of the SysCache lookup?

All fair points: I've applied the attached patch. Thanks for the review.

-Neil

Attachments:

ddl_fixes-2.patchtext/x-patch; charset=us-ascii; name=ddl_fixes-2.patchDownload
Index: doc/src/sgml/ref/reset.sgml
===================================================================
RCS file: /home/neilc/postgres/cvs_root/pgsql/doc/src/sgml/ref/reset.sgml,v
retrieving revision 1.33
diff -c -p -r1.33 reset.sgml
*** doc/src/sgml/ref/reset.sgml	12 Apr 2007 06:53:46 -0000	1.33
--- doc/src/sgml/ref/reset.sgml	12 Apr 2007 22:28:39 -0000
*************** SET <replaceable class="parameter">confi
*** 42,48 ****
  
    <para>
     The default value is defined as the value that the parameter would
!    have had, if no <command>SET</> ever been issued for it in the
     current session.  The actual source of this value might be a
     compiled-in default, the configuration file, command-line options,
     or per-database or per-user default settings.  See <xref
--- 42,48 ----
  
    <para>
     The default value is defined as the value that the parameter would
!    have had, if no <command>SET</> had ever been issued for it in the
     current session.  The actual source of this value might be a
     compiled-in default, the configuration file, command-line options,
     or per-database or per-user default settings.  See <xref
*************** SET <replaceable class="parameter">confi
*** 112,118 ****
        Releases all temporary resources associated with the current
        session. This has the same effect as executing the following
        command sequence:
! <synopsis>
  SET SESSION AUTHORIZATION DEFAULT;
  RESET ALL;
  DEALLOCATE ALL;
--- 112,118 ----
        Releases all temporary resources associated with the current
        session. This has the same effect as executing the following
        command sequence:
! <programlisting>
  SET SESSION AUTHORIZATION DEFAULT;
  RESET ALL;
  DEALLOCATE ALL;
*************** CLOSE ALL;
*** 120,126 ****
  UNLISTEN *;
  RESET PLANS;
  RESET TEMP;
! </synopsis>
       </para>
      </listitem>
     </varlistentry>
--- 120,126 ----
  UNLISTEN *;
  RESET PLANS;
  RESET TEMP;
! </programlisting>
       </para>
      </listitem>
     </varlistentry>
Index: src/backend/catalog/namespace.c
===================================================================
RCS file: /home/neilc/postgres/cvs_root/pgsql/src/backend/catalog/namespace.c,v
retrieving revision 1.94
diff -c -p -r1.94 namespace.c
*** src/backend/catalog/namespace.c	12 Apr 2007 06:53:46 -0000	1.94
--- src/backend/catalog/namespace.c	12 Apr 2007 22:24:18 -0000
*************** InitTempTableNamespace(void)
*** 1946,1963 ****
  void
  ResetTempTableNamespace(void)
  {
! 	char		namespaceName[NAMEDATALEN];
! 	Oid			namespaceId;
! 
! 	/* find oid */
! 	snprintf(namespaceName, sizeof(namespaceName), "pg_temp_%d", MyBackendId);
! 	namespaceId = GetSysCacheOid(NAMESPACENAME,
! 								 CStringGetDatum(namespaceName),
! 								 0, 0, 0);
! 
! 	/* clean if exists */
! 	if (OidIsValid(namespaceId))
! 		RemoveTempRelations(namespaceId);
  }
  
  /*
--- 1946,1953 ----
  void
  ResetTempTableNamespace(void)
  {
! 	if (OidIsValid(myTempNamespace))
! 		RemoveTempRelations(myTempNamespace);
  }
  
  /*
Index: src/include/catalog/namespace.h
===================================================================
RCS file: /home/neilc/postgres/cvs_root/pgsql/src/include/catalog/namespace.h,v
retrieving revision 1.46
diff -c -p -r1.46 namespace.h
*** src/include/catalog/namespace.h	12 Apr 2007 06:53:48 -0000	1.46
--- src/include/catalog/namespace.h	12 Apr 2007 22:34:08 -0000
*************** extern char *NameListToQuotedString(List
*** 81,86 ****
--- 81,87 ----
  extern bool isTempNamespace(Oid namespaceId);
  extern bool isAnyTempNamespace(Oid namespaceId);
  extern bool isOtherTempNamespace(Oid namespaceId);
+ extern void ResetTempTableNamespace(void);
  
  extern OverrideSearchPath *GetOverrideSearchPath(MemoryContext context);
  extern void PushOverrideSearchPath(OverrideSearchPath *newpath);
*************** extern char *namespace_search_path;
*** 100,105 ****
  
  extern List *fetch_search_path(bool includeImplicit);
  
- extern void ResetTempTableNamespace(void);
- 
  #endif   /* NAMESPACE_H */
--- 101,104 ----