mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
Prevent duplicate attribute names in XMLELEMENT.
This commit is contained in:
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.204 2007/01/05 22:19:34 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.205 2007/01/08 23:41:56 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -1415,8 +1415,8 @@ transformXmlExpr(ParseState *pstate, XmlExpr *x)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
x->op == IS_XMLELEMENT
|
||||
? errmsg("unnamed attribute value must be a column reference")
|
||||
: errmsg("unnamed element value must be a column reference")));
|
||||
? errmsg("unnamed XML attribute value must be a column reference")
|
||||
: errmsg("unnamed XML element value must be a column reference")));
|
||||
argname = NULL; /* keep compiler quiet */
|
||||
}
|
||||
|
||||
@ -1424,6 +1424,22 @@ transformXmlExpr(ParseState *pstate, XmlExpr *x)
|
||||
newx->arg_names = lappend(newx->arg_names, makeString(argname));
|
||||
}
|
||||
|
||||
if (x->op == IS_XMLELEMENT)
|
||||
{
|
||||
foreach(lc, newx->arg_names)
|
||||
{
|
||||
ListCell *lc2;
|
||||
|
||||
for_each_cell(lc2, lnext(lc))
|
||||
{
|
||||
if (strcmp(strVal(lfirst(lc)), strVal(lfirst(lc2))) == 0)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("XML attribute name \"%s\" appears more than once", strVal(lfirst(lc)))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* The other arguments are of varying types depending on the function */
|
||||
newx->args = NIL;
|
||||
i = 0;
|
||||
|
Reference in New Issue
Block a user