mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
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.
This commit is contained in:
@ -10,7 +10,7 @@
|
||||
* Copyright (c) 2002-2007, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.70 2007/03/13 00:33:39 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.71 2007/04/12 06:53:46 neilc Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -575,7 +575,10 @@ FetchPreparedStatementTargetList(PreparedStatement *stmt)
|
||||
void
|
||||
DeallocateQuery(DeallocateStmt *stmt)
|
||||
{
|
||||
DropPreparedStatement(stmt->name, true);
|
||||
if (stmt->name)
|
||||
DropPreparedStatement(stmt->name, true);
|
||||
else
|
||||
DropAllPreparedStatements();
|
||||
}
|
||||
|
||||
/*
|
||||
@ -601,6 +604,31 @@ DropPreparedStatement(const char *stmt_name, bool showError)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user