aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2007-01-20 09:27:20 +0000
committerPeter Eisentraut <peter_e@gmx.net>2007-01-20 09:27:20 +0000
commitb4c8d49036b971d892b2dfe1c71d3f0cee116e7f (patch)
treea3db0050c3ea8815e44b2a4014502bfaa9822796 /src/backend/executor
parent9a83bd50b7ec61140fc400350b3e5b1f0cd15722 (diff)
downloadpostgresql-b4c8d49036b971d892b2dfe1c71d3f0cee116e7f.tar.gz
postgresql-b4c8d49036b971d892b2dfe1c71d3f0cee116e7f.zip
Fix xmlconcat by properly merging the XML declarations. Add aggregate
function xmlagg.
Diffstat (limited to 'src/backend/executor')
-rw-r--r--src/backend/executor/execQual.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/backend/executor/execQual.c b/src/backend/executor/execQual.c
index ca804dea210..60f9d35f1f7 100644
--- a/src/backend/executor/execQual.c
+++ b/src/backend/executor/execQual.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/executor/execQual.c,v 1.207 2007/01/14 13:11:53 petere Exp $
+ * $PostgreSQL: pgsql/src/backend/executor/execQual.c,v 1.208 2007/01/20 09:27:19 petere Exp $
*
*-------------------------------------------------------------------------
*/
@@ -2651,7 +2651,6 @@ ExecEvalXml(XmlExprState *xmlExpr, ExprContext *econtext,
StringInfoData buf;
Datum value;
bool isnull;
- char *str;
ListCell *arg;
ListCell *narg;
int i;
@@ -2663,20 +2662,22 @@ ExecEvalXml(XmlExprState *xmlExpr, ExprContext *econtext,
switch (xexpr->op)
{
case IS_XMLCONCAT:
- initStringInfo(&buf);
- foreach(arg, xmlExpr->args)
{
- ExprState *e = (ExprState *) lfirst(arg);
+ List *values = NIL;
- value = ExecEvalExpr(e, econtext, &isnull, NULL);
- if (!isnull)
+ foreach(arg, xmlExpr->args)
+ {
+ ExprState *e = (ExprState *) lfirst(arg);
+
+ value = ExecEvalExpr(e, econtext, &isnull, NULL);
+ if (!isnull)
+ values = lappend(values, DatumGetPointer(value));
+ }
+
+ if (list_length(values) > 0)
{
- /* we know the value is XML type */
- str = DatumGetCString(DirectFunctionCall1(xml_out,
- value));
- appendStringInfoString(&buf, str);
- pfree(str);
*isNull = false;
+ return PointerGetDatum(xmlconcat(values));
}
}
break;