/
githubmirror
/
postgres
Обзор
Документация
Войти
/
githubmirror
/
postgres
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/backend/commands/discard.c
79 строк
2 KB
Álvaro Herrera
Don't include storage/lock.h in so many headers
24 мар 2026, 19:11
Не верифицирован
24 мар 2026, 19:11
2102ebb
Код
Авторство
О чём код?
/*------------------------------------------------------------------------- * * discard.c * The implementation of the DISCARD command * * Copyright (c) 1996-2026, PostgreSQL Global Development Group * * * IDENTIFICATION * src/backend/commands/discard.c * *------------------------------------------------------------------------- */ #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/sequence.h" #include "storage/lock.h" #include "utils/guc.h" #include "utils/portal.h" static void DiscardAll(bool isTopLevel); /* * DISCARD { ALL | SEQUENCES | TEMP | PLANS } */ void DiscardCommand(DiscardStmt *stmt, bool isTopLevel) { switch (stmt->target) { case DISCARD_ALL: DiscardAll(isTopLevel); break; case DISCARD_PLANS: ResetPlanCache(); break; case DISCARD_SEQUENCES: ResetSequenceCaches(); 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. */ PreventInTransactionBlock(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(); ResetSequenceCaches(); }