Logo Search packages:      
Sourcecode: postgresql-8.4 version File versions

discard.c

/*-------------------------------------------------------------------------
 *
 * discard.c
 *      The implementation of the DISCARD command
 *
 * Copyright (c) 1996-2009, PostgreSQL Global Development Group
 *
 *
 * IDENTIFICATION
 *      $PostgreSQL: pgsql/src/backend/commands/discard.c,v 1.6 2009/01/01 17:23: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();
}

Generated by  Doxygen 1.6.0   Back to index