Index: doc/src/sgml/ref/close.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/close.sgml,v
retrieving revision 1.24
diff -p -u -c -r1.24 close.sgml
*** doc/src/sgml/ref/close.sgml 16 Sep 2006 00:30:17 -0000 1.24
--- doc/src/sgml/ref/close.sgml 3 Apr 2007 07:09:30 -0000
*************** PostgreSQL documentation
*** 26,31 ****
--- 26,32 ----
CLOSE name
+ CLOSE ALL
*************** CLOSE nam
*** 63,68 ****
--- 64,79 ----
+
+
+ ALL
+
+
+ Means that all cursors in this session should be released.
+
+
+
+
Index: doc/src/sgml/ref/deallocate.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/deallocate.sgml,v
retrieving revision 1.9
diff -p -u -c -r1.9 deallocate.sgml
*** doc/src/sgml/ref/deallocate.sgml 16 Sep 2006 00:30:18 -0000 1.9
--- doc/src/sgml/ref/deallocate.sgml 3 Apr 2007 07:09:30 -0000
*************** PostgreSQL documentation
*** 26,31 ****
--- 26,32 ----
DEALLOCATE [ PREPARE ] name
+ DEALLOCATE ALL
*************** DEALLOCATE [ PREPARE ]
+
+
+ ALL
+
+
+ Means that all prepared statement should be released.
+
+
+
+
Index: doc/src/sgml/ref/reset.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/reset.sgml,v
retrieving revision 1.32
diff -p -u -c -r1.32 reset.sgml
*** doc/src/sgml/ref/reset.sgml 16 Sep 2006 00:30:19 -0000 1.32
--- doc/src/sgml/ref/reset.sgml 3 Apr 2007 07:09:30 -0000
*************** PostgreSQL documentation
*** 22,27 ****
--- 22,28 ----
RESET configuration_parameter
RESET ALL
+ RESET { SESSION | PLANS | TEMP | TEMPORARY }
*************** SET confi
*** 52,57 ****
--- 53,69 ----
See the SET> reference page for details on the
transaction behavior of RESET>.
+
+
+ RESET> can be used for releasing internal resources that are
+ usually freed at the end of session. RESET TEMP>
+ drops all temporary tables created in current session.
+ RESET PLANS> releases all internally cached plans.
+
+
+ RESET SESSION> releases all externally visible resources
+ for current session.
+
*************** SET confi
*** 76,81 ****
--- 88,131 ----
+
+
+ TEMP, TEMPORARY
+
+
+ Drop all temporary tables created in current session.
+
+
+
+
+
+ PLANS
+
+
+ Release all cached query plans.
+
+
+
+
+
+ SESSION
+
+
+ Release all resources for current session.
+ The effect is same as executing following command sequence:
+
+ SET SESSION AUTHORIZATION DEFAULT;
+ RESET ALL;
+ DEALLOCATE ALL;
+ CLOSE ALL;
+ UNLISTEN *;
+ RESET PLANS;
+ RESET TEMP;
+
+
+
+
+
Index: src/backend/catalog/namespace.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/catalog/namespace.c,v
retrieving revision 1.93
diff -p -u -c -r1.93 namespace.c
*** src/backend/catalog/namespace.c 23 Mar 2007 19:53:51 -0000 1.93
--- src/backend/catalog/namespace.c 3 Apr 2007 07:09:30 -0000
*************** InitTempTableNamespace(void)
*** 1941,1946 ****
--- 1941,1971 ----
}
/*
+ * Clear all temp tables from out temp namespace.
+ */
+ void
+ ResetTempTableNamespace(void)
+ {
+ char namespaceName[NAMEDATALEN];
+ Oid namespaceId;
+
+ /* If not allowed to create, no point proceeding */
+ if (pg_database_aclcheck(MyDatabaseId, GetUserId(),
+ ACL_CREATE_TEMP) != ACLCHECK_OK)
+ return;
+
+ /* 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);
+ }
+
+ /*
* End-of-transaction cleanup for namespaces.
*/
void
Index: src/backend/commands/async.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/async.c,v
retrieving revision 1.135
diff -p -u -c -r1.135 async.c
*** src/backend/commands/async.c 5 Jan 2007 22:19:25 -0000 1.135
--- src/backend/commands/async.c 3 Apr 2007 07:09:30 -0000
*************** static bool unlistenExitRegistered = fal
*** 127,133 ****
bool Trace_notify = false;
- static void Async_UnlistenAll(void);
static void Async_UnlistenOnExit(int code, Datum arg);
static void ProcessIncomingNotify(void);
static void NotifyMyFrontEnd(char *relname, int32 listenerPID);
--- 127,132 ----
*************** Async_Unlisten(const char *relname)
*** 335,341 ****
*
*--------------------------------------------------------------
*/
! static void
Async_UnlistenAll(void)
{
Relation lRel;
--- 334,340 ----
*
*--------------------------------------------------------------
*/
! void
Async_UnlistenAll(void)
{
Relation lRel;
Index: src/backend/commands/portalcmds.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/portalcmds.c,v
retrieving revision 1.62
diff -p -u -c -r1.62 portalcmds.c
*** src/backend/commands/portalcmds.c 13 Mar 2007 00:33:39 -0000 1.62
--- src/backend/commands/portalcmds.c 3 Apr 2007 07:09:30 -0000
*************** PerformPortalClose(const char *name)
*** 236,246 ****
{
Portal portal;
/*
* Disallow empty-string cursor name (conflicts with protocol-level
* unnamed portal).
*/
! if (!name || name[0] == '\0')
ereport(ERROR,
(errcode(ERRCODE_INVALID_CURSOR_NAME),
errmsg("invalid cursor name: must not be empty")));
--- 236,253 ----
{
Portal portal;
+ /* NULL means CLOSE ALL */
+ if (name == NULL)
+ {
+ PortalHashTableDeleteAll();
+ return;
+ }
+
/*
* Disallow empty-string cursor name (conflicts with protocol-level
* unnamed portal).
*/
! if (name[0] == '\0')
ereport(ERROR,
(errcode(ERRCODE_INVALID_CURSOR_NAME),
errmsg("invalid cursor name: must not be empty")));
Index: src/backend/commands/prepare.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/commands/prepare.c,v
retrieving revision 1.70
diff -p -u -c -r1.70 prepare.c
*** src/backend/commands/prepare.c 13 Mar 2007 00:33:39 -0000 1.70
--- src/backend/commands/prepare.c 3 Apr 2007 07:09:30 -0000
*************** FetchPreparedStatementTargetList(Prepare
*** 575,581 ****
void
DeallocateQuery(DeallocateStmt *stmt)
{
! DropPreparedStatement(stmt->name, true);
}
/*
--- 575,584 ----
void
DeallocateQuery(DeallocateStmt *stmt)
{
! if (stmt->name)
! DropPreparedStatement(stmt->name, true);
! else
! DropAllPreparedStatements();
}
/*
*************** DropPreparedStatement(const char *stmt_n
*** 602,607 ****
--- 605,635 ----
}
/*
+ * Drop all cached statements.
+ */
+ void
+ DropAllPreparedStatements(void)
+ {
+ HASH_SEQ_STATUS seq;
+ PreparedStatement *entry;
+
+ /* nothing cached */
+ if (!prepared_queries)
+ return;
+
+ /* walk over cache */
+ hash_seq_init(&seq, prepared_queries);
+ while ((entry = hash_seq_search(&seq)) != NULL)
+ {
+ /* Release the plancache entry */
+ DropCachedPlan(entry->plansource);
+
+ /* Now we can remove the hash table entry */
+ hash_search(prepared_queries, entry->stmt_name, HASH_REMOVE, NULL);
+ }
+ }
+
+ /*
* Implements the 'EXPLAIN EXECUTE' utility statement.
*/
void
Index: src/backend/parser/gram.y
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v
retrieving revision 2.586
diff -p -u -c -r2.586 gram.y
*** src/backend/parser/gram.y 2 Apr 2007 22:20:53 -0000 2.586
--- src/backend/parser/gram.y 3 Apr 2007 07:09:31 -0000
*************** ClosePortalStmt:
*** 1667,1672 ****
--- 1667,1678 ----
n->portalname = $2;
$$ = (Node *)n;
}
+ | CLOSE ALL
+ {
+ ClosePortalStmt *n = makeNode(ClosePortalStmt);
+ n->portalname = NULL;
+ $$ = (Node *)n;
+ }
;
*************** DeallocateStmt: DEALLOCATE name
*** 5584,5589 ****
--- 5590,5601 ----
n->name = $3;
$$ = (Node *) n;
}
+ | DEALLOCATE ALL
+ {
+ DeallocateStmt *n = makeNode(DeallocateStmt);
+ n->name = NULL;
+ $$ = (Node *) n;
+ }
;
/*****************************************************************************
Index: src/backend/tcop/utility.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/tcop/utility.c,v
retrieving revision 1.276
diff -p -u -c -r1.276 utility.c
*** src/backend/tcop/utility.c 2 Apr 2007 03:49:39 -0000 1.276
--- src/backend/tcop/utility.c 3 Apr 2007 07:09:31 -0000
*************** ProcessUtility(Node *parsetree,
*** 990,996 ****
{
VariableResetStmt *n = (VariableResetStmt *) parsetree;
! ResetPGVariable(n->name);
}
break;
--- 990,996 ----
{
VariableResetStmt *n = (VariableResetStmt *) parsetree;
! ResetPGVariable(n->name, isTopLevel);
}
break;
*************** CreateCommandTag(Node *parsetree)
*** 1387,1393 ****
break;
case T_ClosePortalStmt:
! tag = "CLOSE CURSOR";
break;
case T_FetchStmt:
--- 1387,1399 ----
break;
case T_ClosePortalStmt:
! {
! ClosePortalStmt *stmt = (ClosePortalStmt *)parsetree;
! if (stmt->portalname == NULL)
! tag = "CLOSE CURSOR ALL";
! else
! tag = "CLOSE CURSOR";
! }
break;
case T_FetchStmt:
*************** CreateCommandTag(Node *parsetree)
*** 1746,1752 ****
break;
case T_VariableResetStmt:
! tag = "RESET";
break;
case T_CreateTrigStmt:
--- 1752,1764 ----
break;
case T_VariableResetStmt:
! {
! VariableResetStmt *stmt = (VariableResetStmt *)parsetree;
! if (pg_strcasecmp(stmt->name, "session") == 0)
! tag = "RESET SESSION";
! else
! tag = "RESET";
! }
break;
case T_CreateTrigStmt:
*************** CreateCommandTag(Node *parsetree)
*** 1856,1862 ****
break;
case T_DeallocateStmt:
! tag = "DEALLOCATE";
break;
/* already-planned queries */
--- 1868,1880 ----
break;
case T_DeallocateStmt:
! {
! DeallocateStmt *stmt = (DeallocateStmt *)parsetree;
! if (stmt->name == NULL)
! tag = "DEALLOCATE ALL";
! else
! tag = "DEALLOCATE";
! }
break;
/* already-planned queries */
Index: src/backend/utils/cache/plancache.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/cache/plancache.c,v
retrieving revision 1.5
diff -p -u -c -r1.5 plancache.c
*** src/backend/utils/cache/plancache.c 26 Mar 2007 00:36:19 -0000 1.5
--- src/backend/utils/cache/plancache.c 3 Apr 2007 07:09:31 -0000
*************** PlanCacheCallback(Datum arg, Oid relid)
*** 881,886 ****
--- 881,895 ----
}
/*
+ * ResetPlanCache: drop all cached plans.
+ */
+ void
+ ResetPlanCache(void)
+ {
+ PlanCacheCallback((Datum)0, InvalidOid);
+ }
+
+ /*
* ScanQueryForRelids callback function for PlanCacheCallback
*/
static void
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/misc/guc.c,v
retrieving revision 1.383
diff -p -u -c -r1.383 guc.c
*** src/backend/utils/misc/guc.c 19 Mar 2007 23:38:30 -0000 1.383
--- src/backend/utils/misc/guc.c 3 Apr 2007 07:09:31 -0000
*************** GetPGVariableResultDesc(const char *name
*** 4952,4964 ****
}
/*
* RESET command
*/
void
! ResetPGVariable(const char *name)
{
if (pg_strcasecmp(name, "all") == 0)
ResetAllOptions();
else
set_config_option(name,
NULL,
--- 4952,4996 ----
}
/*
+ * RESET SESSION command.
+ */
+ static void
+ ResetSession(bool isTopLevel)
+ {
+ /* disallow active tx */
+ PreventTransactionChain(isTopLevel, "RESET SESSION");
+
+ /* SET SESSION AUTHORIZATION DEFAULT; */
+ SetPGVariable("session_authorization", NIL, false);
+ /* RESET ALL; */
+ ResetAllOptions();
+ /* DEALLOCATE ALL; */
+ DropAllPreparedStatements();
+ /* CLOSE ALL */
+ PortalHashTableDeleteAll();
+ /* UNLISTEN *; */
+ Async_UnlistenAll();
+ /* RESET PLANS */
+ ResetPlanCache();
+ /* RESET TEMP */
+ ResetTempTableNamespace();
+ }
+
+ /*
* RESET command
*/
void
! ResetPGVariable(const char *name, bool isTopLevel)
{
if (pg_strcasecmp(name, "all") == 0)
ResetAllOptions();
+ else if (pg_strcasecmp(name, "session") == 0)
+ ResetSession(isTopLevel);
+ else if (pg_strcasecmp(name, "temp") == 0
+ || pg_strcasecmp(name, "temporary") == 0)
+ ResetTempTableNamespace();
+ else if (pg_strcasecmp(name, "plans") == 0)
+ ResetPlanCache();
else
set_config_option(name,
NULL,
Index: src/backend/utils/mmgr/portalmem.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/mmgr/portalmem.c,v
retrieving revision 1.100
diff -p -u -c -r1.100 portalmem.c
*** src/backend/utils/mmgr/portalmem.c 13 Mar 2007 00:33:42 -0000 1.100
--- src/backend/utils/mmgr/portalmem.c 3 Apr 2007 07:09:31 -0000
*************** PortalDrop(Portal portal, bool isTopComm
*** 452,457 ****
--- 452,480 ----
pfree(portal);
}
+ /*
+ * Delete all declared cursors.
+ *
+ * Used by commands: CLOSE ALL, RESET SESSION
+ */
+ void
+ PortalHashTableDeleteAll(void)
+ {
+ HASH_SEQ_STATUS status;
+ PortalHashEnt *hentry;
+
+ if (PortalHashTable == NULL)
+ return;
+
+ hash_seq_init(&status, PortalHashTable);
+ while ((hentry = hash_seq_search(&status)) != NULL)
+ {
+ Portal portal = hentry->portal;
+ if (portal->status != PORTAL_ACTIVE)
+ PortalDrop(portal, false);
+ }
+ }
+
/*
* Pre-commit processing for portals.
Index: src/include/catalog/namespace.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/catalog/namespace.h,v
retrieving revision 1.45
diff -p -u -c -r1.45 namespace.h
*** src/include/catalog/namespace.h 23 Mar 2007 19:53:52 -0000 1.45
--- src/include/catalog/namespace.h 3 Apr 2007 07:09:31 -0000
*************** extern char *namespace_search_path;
*** 100,103 ****
--- 100,105 ----
extern List *fetch_search_path(bool includeImplicit);
+ extern void ResetTempTableNamespace(void);
+
#endif /* NAMESPACE_H */
Index: src/include/commands/async.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/commands/async.h,v
retrieving revision 1.34
diff -p -u -c -r1.34 async.h
*** src/include/commands/async.h 5 Jan 2007 22:19:53 -0000 1.34
--- src/include/commands/async.h 3 Apr 2007 07:09:31 -0000
*************** extern bool Trace_notify;
*** 19,24 ****
--- 19,25 ----
extern void Async_Notify(const char *relname);
extern void Async_Listen(const char *relname);
extern void Async_Unlisten(const char *relname);
+ extern void Async_UnlistenAll(void);
/* perform (or cancel) outbound notify processing at transaction commit */
extern void AtCommit_Notify(void);
Index: src/include/commands/prepare.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/commands/prepare.h,v
retrieving revision 1.25
diff -p -u -c -r1.25 prepare.h
*** src/include/commands/prepare.h 13 Mar 2007 00:33:43 -0000 1.25
--- src/include/commands/prepare.h 3 Apr 2007 07:09:31 -0000
*************** extern void DropPreparedStatement(const
*** 59,62 ****
--- 59,64 ----
extern TupleDesc FetchPreparedStatementResultDesc(PreparedStatement *stmt);
extern List *FetchPreparedStatementTargetList(PreparedStatement *stmt);
+ void DropAllPreparedStatements(void);
+
#endif /* PREPARE_H */
Index: src/include/nodes/parsenodes.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/nodes/parsenodes.h,v
retrieving revision 1.344
diff -p -u -c -r1.344 parsenodes.h
*** src/include/nodes/parsenodes.h 2 Apr 2007 03:49:41 -0000 1.344
--- src/include/nodes/parsenodes.h 3 Apr 2007 07:09:31 -0000
*************** typedef struct ClosePortalStmt
*** 1451,1456 ****
--- 1451,1457 ----
{
NodeTag type;
char *portalname; /* name of the portal (cursor) */
+ /* NULL means CLOSE ALL */
} ClosePortalStmt;
/* ----------------------
*************** typedef struct DeallocateStmt
*** 1981,1986 ****
--- 1982,1988 ----
{
NodeTag type;
char *name; /* The name of the plan to remove */
+ /* NULL means DEALLOCATE ALL */
} DeallocateStmt;
/*
Index: src/include/utils/guc.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/utils/guc.h,v
retrieving revision 1.80
diff -p -u -c -r1.80 guc.h
*** src/include/utils/guc.h 6 Mar 2007 02:06:15 -0000 1.80
--- src/include/utils/guc.h 3 Apr 2007 07:09:31 -0000
*************** extern int GetNumConfigOptions(void);
*** 201,207 ****
extern void SetPGVariable(const char *name, List *args, bool is_local);
extern void GetPGVariable(const char *name, DestReceiver *dest);
extern TupleDesc GetPGVariableResultDesc(const char *name);
! extern void ResetPGVariable(const char *name);
extern char *flatten_set_variable_args(const char *name, List *args);
--- 201,207 ----
extern void SetPGVariable(const char *name, List *args, bool is_local);
extern void GetPGVariable(const char *name, DestReceiver *dest);
extern TupleDesc GetPGVariableResultDesc(const char *name);
! extern void ResetPGVariable(const char *name, bool isTopLevel);
extern char *flatten_set_variable_args(const char *name, List *args);
Index: src/include/utils/plancache.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/utils/plancache.h,v
retrieving revision 1.4
diff -p -u -c -r1.4 plancache.h
*** src/include/utils/plancache.h 23 Mar 2007 19:53:52 -0000 1.4
--- src/include/utils/plancache.h 3 Apr 2007 07:09:31 -0000
*************** extern void ReleaseCachedPlan(CachedPlan
*** 105,108 ****
--- 105,110 ----
extern TupleDesc PlanCacheComputeResultDesc(List *stmt_list);
extern bool HaveCachedPlans(void);
+ extern void ResetPlanCache(void);
+
#endif /* PLANCACHE_H */
Index: src/include/utils/portal.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/utils/portal.h,v
retrieving revision 1.74
diff -p -u -c -r1.74 portal.h
*** src/include/utils/portal.h 13 Mar 2007 00:33:43 -0000 1.74
--- src/include/utils/portal.h 3 Apr 2007 07:09:31 -0000
*************** extern void PortalDefineQuery(Portal por
*** 212,216 ****
--- 212,217 ----
CachedPlan *cplan);
extern Node *PortalListGetPrimaryStmt(List *stmts);
extern void PortalCreateHoldStore(Portal portal);
+ extern void PortalHashTableDeleteAll(void);
#endif /* PORTAL_H */
Index: src/test/regress/expected/guc.out
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/expected/guc.out,v
retrieving revision 1.2
diff -p -u -c -r1.2 guc.out
*** src/test/regress/expected/guc.out 13 Aug 2006 19:31:06 -0000 1.2
--- src/test/regress/expected/guc.out 3 Apr 2007 07:09:31 -0000
*************** SELECT '2006-08-13 12:34:56'::timestampt
*** 425,427 ****
--- 425,527 ----
Sun Aug 13 12:34:56 2006 PDT
(1 row)
+ --
+ -- Test RESET TEMP
+ --
+ CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+ SELECT relname FROM pg_class WHERE relname = 'reset_test';
+ relname
+ ------------
+ reset_test
+ (1 row)
+
+ RESET TEMP;
+ SELECT relname FROM pg_class WHERE relname = 'reset_test';
+ relname
+ ---------
+ (0 rows)
+
+ --
+ -- Test RESET SESSION
+ --
+ -- do changes
+ DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
+ PREPARE foo AS SELECT 1;
+ LISTEN foo_event;
+ SET vacuum_cost_delay = 13;
+ CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
+ CREATE ROLE temp_reset_user;
+ SET SESSION AUTHORIZATION temp_reset_user;
+ -- look changes
+ SELECT relname FROM pg_listener;
+ relname
+ -----------
+ foo_event
+ (1 row)
+
+ SELECT name FROM pg_prepared_statements;
+ name
+ ------
+ foo
+ (1 row)
+
+ SELECT name FROM pg_cursors;
+ name
+ ------
+ foo
+ (1 row)
+
+ SHOW vacuum_cost_delay;
+ vacuum_cost_delay
+ -------------------
+ 13ms
+ (1 row)
+
+ SELECT relname from pg_class where relname = 'tmp_foo';
+ relname
+ ---------
+ tmp_foo
+ (1 row)
+
+ SELECT current_user = 'temp_reset_user';
+ ?column?
+ ----------
+ t
+ (1 row)
+
+ -- big RESET
+ RESET SESSION;
+ -- look again
+ SELECT relname FROM pg_listener;
+ relname
+ ---------
+ (0 rows)
+
+ SELECT name FROM pg_prepared_statements;
+ name
+ ------
+ (0 rows)
+
+ SELECT name FROM pg_cursors;
+ name
+ ------
+ (0 rows)
+
+ SHOW vacuum_cost_delay;
+ vacuum_cost_delay
+ -------------------
+ 0
+ (1 row)
+
+ SELECT relname from pg_class where relname = 'tmp_foo';
+ relname
+ ---------
+ (0 rows)
+
+ SELECT current_user = 'temp_reset_user';
+ ?column?
+ ----------
+ f
+ (1 row)
+
+ DROP ROLE temp_reset_user;
Index: src/test/regress/expected/portals.out
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/expected/portals.out,v
retrieving revision 1.11
diff -p -u -c -r1.11 portals.out
*** src/test/regress/expected/portals.out 27 Feb 2006 16:09:50 -0000 1.11
--- src/test/regress/expected/portals.out 3 Apr 2007 07:09:31 -0000
*************** EXECUTE cprep;
*** 869,871 ****
--- 869,901 ----
c2 | declare c2 cursor with hold for select count_tt1_v(), count_tt1_s(); | t | f | f
(1 row)
+ -- test CLOSE ALL;
+ SELECT name FROM pg_cursors ORDER BY 1;
+ name
+ ------
+ c2
+ (1 row)
+
+ CLOSE ALL;
+ SELECT name FROM pg_cursors ORDER BY 1;
+ name
+ ------
+ (0 rows)
+
+ BEGIN;
+ DECLARE foo1 CURSOR WITH HOLD FOR SELECT 1;
+ DECLARE foo2 CURSOR WITHOUT HOLD FOR SELECT 1;
+ SELECT name FROM pg_cursors ORDER BY 1;
+ name
+ ------
+ foo1
+ foo2
+ (2 rows)
+
+ CLOSE ALL;
+ SELECT name FROM pg_cursors ORDER BY 1;
+ name
+ ------
+ (0 rows)
+
+ COMMIT;
Index: src/test/regress/expected/prepare.out
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/expected/prepare.out,v
retrieving revision 1.12
diff -p -u -c -r1.12 prepare.out
*** src/test/regress/expected/prepare.out 21 Dec 2006 16:05:16 -0000 1.12
--- src/test/regress/expected/prepare.out 3 Apr 2007 07:09:31 -0000
*************** SELECT name, statement, parameter_types
*** 166,168 ****
--- 166,176 ----
: SELECT * FROM road WHERE thepath = $1;
(5 rows)
+ -- test DEALLOCATE ALL;
+ DEALLOCATE ALL;
+ SELECT name, statement, parameter_types FROM pg_prepared_statements
+ ORDER BY name;
+ name | statement | parameter_types
+ ------+-----------+-----------------
+ (0 rows)
+
Index: src/test/regress/sql/guc.sql
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/sql/guc.sql,v
retrieving revision 1.2
diff -p -u -c -r1.2 guc.sql
*** src/test/regress/sql/guc.sql 13 Aug 2006 19:31:06 -0000 1.2
--- src/test/regress/sql/guc.sql 3 Apr 2007 07:09:31 -0000
*************** SELECT '2006-08-13 12:34:56'::timestampt
*** 123,125 ****
--- 123,164 ----
RESET datestyle;
SHOW datestyle;
SELECT '2006-08-13 12:34:56'::timestamptz;
+
+ --
+ -- Test RESET TEMP
+ --
+ CREATE TEMP TABLE reset_test ( data text ) ON COMMIT DELETE ROWS;
+ SELECT relname FROM pg_class WHERE relname = 'reset_test';
+ RESET TEMP;
+ SELECT relname FROM pg_class WHERE relname = 'reset_test';
+
+ --
+ -- Test RESET SESSION
+ --
+
+ -- do changes
+ DECLARE foo CURSOR WITH HOLD FOR SELECT 1;
+ PREPARE foo AS SELECT 1;
+ LISTEN foo_event;
+ SET vacuum_cost_delay = 13;
+ CREATE TEMP TABLE tmp_foo (data text) ON COMMIT DELETE ROWS;
+ CREATE ROLE temp_reset_user;
+ SET SESSION AUTHORIZATION temp_reset_user;
+ -- look changes
+ SELECT relname FROM pg_listener;
+ SELECT name FROM pg_prepared_statements;
+ SELECT name FROM pg_cursors;
+ SHOW vacuum_cost_delay;
+ SELECT relname from pg_class where relname = 'tmp_foo';
+ SELECT current_user = 'temp_reset_user';
+ -- big RESET
+ RESET SESSION;
+ -- look again
+ SELECT relname FROM pg_listener;
+ SELECT name FROM pg_prepared_statements;
+ SELECT name FROM pg_cursors;
+ SHOW vacuum_cost_delay;
+ SELECT relname from pg_class where relname = 'tmp_foo';
+ SELECT current_user = 'temp_reset_user';
+ DROP ROLE temp_reset_user;
+
Index: src/test/regress/sql/portals.sql
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/sql/portals.sql,v
retrieving revision 1.8
diff -p -u -c -r1.8 portals.sql
*** src/test/regress/sql/portals.sql 27 Feb 2006 16:09:50 -0000 1.8
--- src/test/regress/sql/portals.sql 3 Apr 2007 07:09:31 -0000
*************** ROLLBACK;
*** 303,305 ****
--- 303,320 ----
PREPARE cprep AS
SELECT name, statement, is_holdable, is_binary, is_scrollable FROM pg_cursors;
EXECUTE cprep;
+
+ -- test CLOSE ALL;
+ SELECT name FROM pg_cursors ORDER BY 1;
+ CLOSE ALL;
+ SELECT name FROM pg_cursors ORDER BY 1;
+ BEGIN;
+ DECLARE foo1 CURSOR WITH HOLD FOR SELECT 1;
+ DECLARE foo2 CURSOR WITHOUT HOLD FOR SELECT 1;
+ SELECT name FROM pg_cursors ORDER BY 1;
+ CLOSE ALL;
+ SELECT name FROM pg_cursors ORDER BY 1;
+ COMMIT;
+
+
+
Index: src/test/regress/sql/prepare.sql
===================================================================
RCS file: /projects/cvsroot/pgsql/src/test/regress/sql/prepare.sql,v
retrieving revision 1.4
diff -p -u -c -r1.4 prepare.sql
*** src/test/regress/sql/prepare.sql 15 Jan 2006 22:18:47 -0000 1.4
--- src/test/regress/sql/prepare.sql 3 Apr 2007 07:09:31 -0000
*************** PREPARE q7(unknown) AS
*** 68,70 ****
--- 68,76 ----
SELECT name, statement, parameter_types FROM pg_prepared_statements
ORDER BY name;
+
+ -- test DEALLOCATE ALL;
+ DEALLOCATE ALL;
+ SELECT name, statement, parameter_types FROM pg_prepared_statements
+ ORDER BY name;
+