mirror of
https://github.com/postgres/postgres.git
synced 2025-07-17 06:41:09 +03:00
Add support for xmlval IS DOCUMENT expression.
This commit is contained in:
@ -11,7 +11,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.573 2007/01/09 02:14:14 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.574 2007/01/14 13:11:53 petere Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
@ -7147,6 +7147,16 @@ a_expr: c_expr { $$ = $1; }
|
||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||
errmsg("UNIQUE predicate is not yet implemented")));
|
||||
}
|
||||
| a_expr IS DOCUMENT_P %prec IS
|
||||
{
|
||||
$$ = makeXmlExpr(IS_DOCUMENT, NULL, NIL, list_make1($1));
|
||||
}
|
||||
| a_expr IS NOT DOCUMENT_P %prec IS
|
||||
{
|
||||
$$ = (Node *) makeA_Expr(AEXPR_NOT, NIL, NULL,
|
||||
makeXmlExpr(IS_DOCUMENT, NULL, NIL, list_make1($1)),
|
||||
@2);
|
||||
}
|
||||
;
|
||||
|
||||
/*
|
||||
@ -7207,6 +7217,16 @@ b_expr: c_expr
|
||||
{
|
||||
$$ = (Node *) makeSimpleA_Expr(AEXPR_OF, "<>", $1, (Node *) $6, @2);
|
||||
}
|
||||
| b_expr IS DOCUMENT_P %prec IS
|
||||
{
|
||||
$$ = makeXmlExpr(IS_DOCUMENT, NULL, NIL, list_make1($1));
|
||||
}
|
||||
| b_expr IS NOT DOCUMENT_P %prec IS
|
||||
{
|
||||
$$ = (Node *) makeA_Expr(AEXPR_NOT, NIL, NULL,
|
||||
makeXmlExpr(IS_DOCUMENT, NULL, NIL, list_make1($1)),
|
||||
@2);
|
||||
}
|
||||
;
|
||||
|
||||
/*
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.207 2007/01/12 22:09:49 petere Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_expr.c,v 1.208 2007/01/14 13:11:53 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -1483,6 +1483,10 @@ transformXmlExpr(ParseState *pstate, XmlExpr *x)
|
||||
else
|
||||
newe = coerce_to_boolean(pstate, newe, "XMLROOT");
|
||||
break;
|
||||
case IS_DOCUMENT:
|
||||
newe = coerce_to_specific_type(pstate, newe, XMLOID,
|
||||
"IS DOCUMENT");
|
||||
break;
|
||||
}
|
||||
newx->args = lappend(newx->args, newe);
|
||||
i++;
|
||||
@ -1782,7 +1786,10 @@ exprType(Node *expr)
|
||||
type = ((MinMaxExpr *) expr)->minmaxtype;
|
||||
break;
|
||||
case T_XmlExpr:
|
||||
type = XMLOID;
|
||||
if (((XmlExpr *) expr)->op == IS_DOCUMENT)
|
||||
type = BOOLOID;
|
||||
else
|
||||
type = XMLOID;
|
||||
break;
|
||||
case T_NullIfExpr:
|
||||
type = exprType((Node *) linitial(((NullIfExpr *) expr)->args));
|
||||
|
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_target.c,v 1.152 2007/01/05 22:19:34 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/parser/parse_target.c,v 1.153 2007/01/14 13:11:54 petere Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -1337,6 +1337,9 @@ FigureColnameInternal(Node *node, char **name)
|
||||
case IS_XMLROOT:
|
||||
*name = "xmlroot";
|
||||
return 2;
|
||||
case IS_DOCUMENT:
|
||||
/* nothing */
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
Reference in New Issue
Block a user