mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Add location field to DefElem
Add a location field to the DefElem struct, used to parse many utility commands. Update various error messages to supply error position information. To propogate the error position information in a more systematic way, create a ParseState in standard_ProcessUtility() and pass that to interested functions implementing the utility commands. This seems better than passing the query string and then reassembling a parse state ad hoc, which violates the encapsulation of the ParseState type. Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com>
This commit is contained in:
@ -69,7 +69,7 @@ have_createrole_privilege(void)
|
||||
* CREATE ROLE
|
||||
*/
|
||||
Oid
|
||||
CreateRole(CreateRoleStmt *stmt)
|
||||
CreateRole(ParseState *pstate, CreateRoleStmt *stmt)
|
||||
{
|
||||
Relation pg_authid_rel;
|
||||
TupleDesc pg_authid_dsc;
|
||||
@ -136,7 +136,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dpassword)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dpassword = defel;
|
||||
if (strcmp(defel->defname, "encryptedPassword") == 0)
|
||||
encrypt_password = true;
|
||||
@ -153,7 +154,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dissuper)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dissuper = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "inherit") == 0)
|
||||
@ -161,7 +163,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dinherit)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dinherit = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "createrole") == 0)
|
||||
@ -169,7 +172,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dcreaterole)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dcreaterole = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "createdb") == 0)
|
||||
@ -177,7 +181,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dcreatedb)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dcreatedb = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "canlogin") == 0)
|
||||
@ -185,7 +190,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dcanlogin)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dcanlogin = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "isreplication") == 0)
|
||||
@ -193,7 +199,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (disreplication)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
disreplication = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "connectionlimit") == 0)
|
||||
@ -201,7 +208,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dconnlimit)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dconnlimit = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "addroleto") == 0)
|
||||
@ -209,7 +217,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (daddroleto)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
daddroleto = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "rolemembers") == 0)
|
||||
@ -217,7 +226,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (drolemembers)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
drolemembers = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "adminmembers") == 0)
|
||||
@ -225,7 +235,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dadminmembers)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dadminmembers = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "validUntil") == 0)
|
||||
@ -233,7 +244,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dvalidUntil)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dvalidUntil = defel;
|
||||
}
|
||||
else if (strcmp(defel->defname, "bypassrls") == 0)
|
||||
@ -241,7 +253,8 @@ CreateRole(CreateRoleStmt *stmt)
|
||||
if (dbypassRLS)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("conflicting or redundant options")));
|
||||
errmsg("conflicting or redundant options"),
|
||||
parser_errposition(pstate, defel->location)));
|
||||
dbypassRLS = defel;
|
||||
}
|
||||
else
|
||||
|
Reference in New Issue
Block a user