Skip to content

Commit 48261a8

Browse files
committed
[bugfix] passing DB stored nodes to fn:transform
passing persistent nodes from XQuery to fn:transform as the global context item didnt’t work, in the same way as for use as parameters: NodeProxy objects were not being considered; dereference their nodes and use the result appropriately. Regression test for this case.
1 parent 09a41b4 commit 48261a8

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

exist-core/src/main/java/org/exist/xquery/functions/fn/transform/Convert.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ static net.sf.saxon.s9api.QName of(final QNameValue qName) {
120120
}
121121

122122
XdmValue of(final Item item) throws XPathException {
123+
if (item instanceof NodeProxy nodeProxy) {
124+
return ofNode(nodeProxy.getNode());
125+
}
123126
final int itemType = item.getType();
124127
if (Type.subTypeOf(itemType, Type.ATOMIC)) {
125128
return ofAtomic((AtomicValue) item);

exist-core/src/test/java/xquery/xquery3/XQuery3Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"src/test/xquery/xquery3",
3030
"src/test/xquery/xquery3/transform",
3131
// To add an individual test or only run a specific set of tests -
32-
// "src/test/xquery/xquery3/serialize.xql",
32+
//"src/test/xquery/xquery3/serialize.xql",
3333
})
3434
public class XQuery3Tests {
3535
}

exist-core/src/test/xquery/xquery3/transform/fnTransformRegressionDocAsParameter.xqm

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,20 @@ module namespace testTransform="http://exist-db.org/xquery/test/function_transfo
2525
import module namespace xmldb="http://exist-db.org/xquery/xmldb";
2626
declare namespace test="http://exist-db.org/xquery/xqsuite";
2727

28-
declare variable $testTransform:stylesheet := <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
28+
declare variable $testTransform:stylesheet1 := <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
2929
<xsl:param name='v'/>
3030
<xsl:template match='/'>
3131
<v><xsl:value-of select='$v'/></v>
3232
</xsl:template>
3333
</xsl:stylesheet>;
3434

35+
declare variable $testTransform:stylesheet2 := <xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
36+
<xsl:param name='v'/>
37+
<xsl:template name='named-template' match='/'>
38+
<v><xsl:value-of select='$v'/></v>
39+
</xsl:template>
40+
</xsl:stylesheet>;
41+
3542
declare variable $testTransform:document := <document>
3643
<catalog>
3744
<book id="bk101">
@@ -60,9 +67,10 @@ declare
6067
%test:setUp
6168
function testTransform:setup() {
6269
let $coll := xmldb:create-collection("/db", "regression-test")
63-
let $storeStylesheet := xmldb:store($coll, "stylesheet.xsl", $testTransform:stylesheet, "application/xslt+xml")
64-
return ( xmldb:store($coll, "document.xml", $testTransform:document, "application/document")
65-
)
70+
let $storeStylesheet1 := xmldb:store($coll, "stylesheet1.xsl", $testTransform:stylesheet1, "application/xslt+xml")
71+
let $storeStylesheet2 := xmldb:store($coll, "stylesheet2.xsl", $testTransform:stylesheet2, "application/xslt+xml")
72+
let $storeDocument := xmldb:store($coll, "document.xml", $testTransform:document, "application/document")
73+
return ()
6674
};
6775
6876
declare
@@ -80,8 +88,27 @@ function testTransform:regression-test-1() {
8088
let $in := parse-xml("<dummy/>")
8189
let $result := ( fn:transform(map{
8290
"source-node":$in,
83-
"stylesheet-node":doc("/db/regression-test/stylesheet.xsl"),
91+
"stylesheet-node":doc("/db/regression-test/stylesheet1.xsl"),
8492
"stylesheet-params": map { QName("","v"): doc("/db/regression-test/document.xml") } } ) )?output
8593
return $result
8694
};
8795
96+
declare
97+
%test:assertEquals("<v>Gambardella, MatthewXML Developer's GuideComputer44.952000-10-01An in-depth look at creating applications
98+
with XML.Ralls, KimMidnight RainFantasy5.952000-12-16A former architect battles corporate zombies,
99+
an evil sorceress, and her own childhood to become queen
100+
of the world.</v>")
101+
function testTransform:regression-test-2() {
102+
let $in := parse-xml("<dummy/>")
103+
let $result := ( fn:transform(map{
104+
"source-node":$in,
105+
"stylesheet-node":doc("/db/regression-test/stylesheet2.xsl"),
106+
"initial-template": QName('', 'named-template'),
107+
"global-context-item" : fn:doc("/db/regression-test/document.xml"),
108+
"stylesheet-params": map {
109+
QName('', 'v'): fn:doc("/db/regression-test/document.xml")
110+
}}))?output
111+
return $result
112+
};
113+
114+

0 commit comments

Comments
 (0)