mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-28 01:11:50 +02:00
73 lines
1.7 KiB
C
73 lines
1.7 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* discard.c
|
|
* The implementation of the DISCARD command
|
|
*
|
|
* Copyright (c) 1996-2010, PostgreSQL Global Development Group
|
|
*
|
|
*
|
|
* IDENTIFICATION
|
|
* $PostgreSQL: pgsql/src/backend/commands/discard.c,v 1.7 2010/01/02 16:57:37 momjian Exp $
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#include "postgres.h"
|
|
|
|
#include "access/xact.h"
|
|
#include "catalog/namespace.h"
|
|
#include "commands/async.h"
|
|
#include "commands/discard.h"
|
|
#include "commands/prepare.h"
|
|
#include "commands/variable.h"
|
|
#include "utils/plancache.h"
|
|
#include "utils/portal.h"
|
|
|
|
static void DiscardAll(bool isTopLevel);
|
|
|
|
/*
|
|
* DISCARD { ALL | TEMP | PLANS }
|
|
*/
|
|
void
|
|
DiscardCommand(DiscardStmt *stmt, bool isTopLevel)
|
|
{
|
|
switch (stmt->target)
|
|
{
|
|
case DISCARD_ALL:
|
|
DiscardAll(isTopLevel);
|
|
break;
|
|
|
|
case DISCARD_PLANS:
|
|
ResetPlanCache();
|
|
break;
|
|
|
|
case DISCARD_TEMP:
|
|
ResetTempTableNamespace();
|
|
break;
|
|
|
|
default:
|
|
elog(ERROR, "unrecognized DISCARD target: %d", stmt->target);
|
|
}
|
|
}
|
|
|
|
static void
|
|
DiscardAll(bool isTopLevel)
|
|
{
|
|
/*
|
|
* Disallow DISCARD ALL in a transaction block. This is arguably
|
|
* inconsistent (we don't make a similar check in the command sequence
|
|
* that DISCARD ALL is equivalent to), but the idea is to catch mistakes:
|
|
* DISCARD ALL inside a transaction block would leave the transaction
|
|
* still uncommitted.
|
|
*/
|
|
PreventTransactionChain(isTopLevel, "DISCARD ALL");
|
|
|
|
SetPGVariable("session_authorization", NIL, false);
|
|
ResetAllOptions();
|
|
DropAllPreparedStatements();
|
|
PortalHashTableDeleteAll();
|
|
Async_UnlistenAll();
|
|
LockReleaseAll(USER_LOCKMETHOD, true);
|
|
ResetPlanCache();
|
|
ResetTempTableNamespace();
|
|
}
|