mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
DROP IF EXISTS for ROLE/USER/GROUP
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
* Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.167 2005/12/23 16:46:39 petere Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.168 2006/02/04 19:06:46 adunstan Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -840,9 +840,22 @@ DropRole(DropRoleStmt *stmt)
|
||||
PointerGetDatum(role),
|
||||
0, 0, 0);
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("role \"%s\" does not exist", role)));
|
||||
{
|
||||
if (!stmt->missing_ok)
|
||||
{
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||
errmsg("role \"%s\" does not exist", role)));
|
||||
}
|
||||
else
|
||||
{
|
||||
ereport(NOTICE,
|
||||
(errmsg("role \"%s\" does not exist, skipping",
|
||||
role)));
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
roleid = HeapTupleGetOid(tuple);
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.325 2006/01/31 21:39:23 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/copyfuncs.c,v 1.326 2006/02/04 19:06:46 adunstan Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -2518,6 +2518,7 @@ _copyDropRoleStmt(DropRoleStmt *from)
|
||||
DropRoleStmt *newnode = makeNode(DropRoleStmt);
|
||||
|
||||
COPY_NODE_FIELD(roles);
|
||||
COPY_SCALAR_FIELD(missing_ok);
|
||||
|
||||
return newnode;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.261 2006/01/31 21:39:23 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/nodes/equalfuncs.c,v 1.262 2006/02/04 19:06:46 adunstan Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1398,6 +1398,7 @@ static bool
|
||||
_equalDropRoleStmt(DropRoleStmt *a, DropRoleStmt *b)
|
||||
{
|
||||
COMPARE_NODE_FIELD(roles);
|
||||
COMPARE_SCALAR_FIELD(missing_ok);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.525 2006/01/31 22:40:03 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.526 2006/02/04 19:06:46 adunstan Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
@@ -824,9 +824,17 @@ DropRoleStmt:
|
||||
DROP ROLE name_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = FALSE;
|
||||
n->roles = $3;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| DROP ROLE IF_P EXISTS name_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = TRUE;
|
||||
n->roles = $5;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
;
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -842,9 +850,17 @@ DropUserStmt:
|
||||
DROP USER name_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = FALSE;
|
||||
n->roles = $3;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| DROP USER IF_P EXISTS name_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->roles = $5;
|
||||
n->missing_ok = TRUE;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
@@ -900,9 +916,17 @@ DropGroupStmt:
|
||||
DROP GROUP_P name_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = FALSE;
|
||||
n->roles = $3;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| DROP GROUP_P IF_P EXISTS name_list
|
||||
{
|
||||
DropRoleStmt *n = makeNode(DropRoleStmt);
|
||||
n->missing_ok = TRUE;
|
||||
n->roles = $5;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user