aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlvaro Herrera <alvherre@alvh.no-ip.org>2019-03-07 11:17:09 -0300
committerAlvaro Herrera <alvherre@alvh.no-ip.org>2019-03-07 11:20:35 -0300
commiteaaa5986ad03f7871fa95878460e1132cb7e8963 (patch)
tree0442a48dd65e5f254bcfdc7f659e9d94b38a7aa4 /src
parentcb706ec4b60b3dede957ffdd70451b017eddffb0 (diff)
downloadpostgresql-eaaa5986ad03f7871fa95878460e1132cb7e8963.tar.gz
postgresql-eaaa5986ad03f7871fa95878460e1132cb7e8963.zip
Fix the BY {REF,VALUE} clause of XMLEXISTS/XMLTABLE
This clause is used to indicate the passing mode of a XML document, but we were doing it wrong: we accepted BY REF and ignored it, and rejected BY VALUE as a syntax error. The reality, however, is that documents are always passed BY VALUE, so rejecting that clause was silly. Change things so that we accept BY VALUE. BY REF continues to be accepted, and continues to be ignored. Author: Chapman Flack Reviewed-by: Pavel Stehule Discussion: https://postgr.es/m/5C297BB7.9070509@anastigmatix.net
Diffstat (limited to 'src')
-rw-r--r--src/backend/catalog/sql_features.txt4
-rw-r--r--src/backend/parser/gram.y15
2 files changed, 12 insertions, 7 deletions
diff --git a/src/backend/catalog/sql_features.txt b/src/backend/catalog/sql_features.txt
index aeb262a5b0e..bade0fe9aeb 100644
--- a/src/backend/catalog/sql_features.txt
+++ b/src/backend/catalog/sql_features.txt
@@ -635,8 +635,8 @@ X204 XMLQuery: initializing an XQuery variable NO
X205 XMLQuery: EMPTY ON EMPTY option NO
X206 XMLQuery: NULL ON EMPTY option NO
X211 XML 1.1 support NO
-X221 XML passing mechanism BY VALUE NO
-X222 XML passing mechanism BY REF YES
+X221 XML passing mechanism BY VALUE YES
+X222 XML passing mechanism BY REF NO parser accepts BY REF but ignores it; passing is always BY VALUE
X231 XML(CONTENT(UNTYPED)) type NO
X232 XML(CONTENT(ANY)) type NO
X241 RETURNING CONTENT in XML publishing NO
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 753af6073f3..e23e68fdb33 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -13951,20 +13951,25 @@ xmlexists_argument:
{
$$ = $2;
}
- | PASSING c_expr BY REF
+ | PASSING c_expr xml_passing_mech
{
$$ = $2;
}
- | PASSING BY REF c_expr
+ | PASSING xml_passing_mech c_expr
{
- $$ = $4;
+ $$ = $3;
}
- | PASSING BY REF c_expr BY REF
+ | PASSING xml_passing_mech c_expr xml_passing_mech
{
- $$ = $4;
+ $$ = $3;
}
;
+xml_passing_mech:
+ BY REF
+ | BY VALUE_P
+ ;
+
/*
* Aggregate decoration clauses