Header And Logo

PostgreSQL
| The world's most advanced open source database.

Functions

discard.c File Reference

#include "postgres.h"
#include "access/xact.h"
#include "catalog/namespace.h"
#include "commands/async.h"
#include "commands/discard.h"
#include "commands/prepare.h"
#include "utils/guc.h"
#include "utils/portal.h"
Include dependency graph for discard.c:

Go to the source code of this file.

Functions

static void DiscardAll (bool isTopLevel)
void DiscardCommand (DiscardStmt *stmt, bool isTopLevel)

Function Documentation

static void DiscardAll ( bool  isTopLevel  )  [static]

Definition at line 52 of file discard.c.

References Async_UnlistenAll(), DropAllPreparedStatements(), LockReleaseAll(), NIL, PortalHashTableDeleteAll(), PreventTransactionChain(), ResetAllOptions(), ResetPlanCache(), ResetTempTableNamespace(), SetPGVariable(), and USER_LOCKMETHOD.

Referenced by DiscardCommand().

{
    /*
     * 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");

    /* Closing portals might run user-defined code, so do that first. */
    PortalHashTableDeleteAll();
    SetPGVariable("session_authorization", NIL, false);
    ResetAllOptions();
    DropAllPreparedStatements();
    Async_UnlistenAll();
    LockReleaseAll(USER_LOCKMETHOD, true);
    ResetPlanCache();
    ResetTempTableNamespace();
}

void DiscardCommand ( DiscardStmt stmt,
bool  isTopLevel 
)

Definition at line 30 of file discard.c.

References DISCARD_ALL, DISCARD_PLANS, DISCARD_TEMP, DiscardAll(), elog, ERROR, ResetPlanCache(), ResetTempTableNamespace(), and DiscardStmt::target.

Referenced by standard_ProcessUtility().

{
    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);
    }
}