Skip to content

Commit 9fb58e6

Browse files
committed
[fix] cardinality of CastExpression#toFunction
1 parent 50393f8 commit 9fb58e6

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

exist-core/src/main/java/org/exist/xquery/CastExpression.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public Function toFunction() throws XPathException {
190190
try {
191191
final QName qname = QName.parse(context, typeName);
192192
final FunctionSignature signature = new FunctionSignature(qname);
193-
final SequenceType argType = new SequenceType(Type.ITEM, Cardinality.EXACTLY_ONE);
193+
final SequenceType argType = new SequenceType(Type.ITEM, Cardinality.ZERO_OR_ONE);
194194
signature.setArgumentTypes(new SequenceType[]{argType});
195195
signature.setReturnType(new SequenceType(CastExpression.this.requiredType, CastExpression.this.cardinality));
196196
return new FunctionWrapper(this, signature);

exist-core/src/test/xquery/xquery3/arrowop.xql

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,3 +278,24 @@ function ao:for-each-pair-with-contextitem () {
278278
=> string-join()
279279
};
280280

281+
(:~
282+
check if CastExpression#toFuntion has correct cardinality check
283+
see https://github.com/eXist-db/exist/issues/4971
284+
:)
285+
declare
286+
%test:assertEmpty
287+
function ao:type-constructor-after-arrow-empty-sequence () {
288+
() => xs:string()
289+
};
290+
291+
declare
292+
%test:assertEquals("1")
293+
function ao:type-constructor-after-arrow-integer () {
294+
1 => xs:string()
295+
};
296+
297+
declare
298+
%test:assertError("XPTY0004")
299+
function ao:type-constructor-after-arrow-integer-sequence () {
300+
(1,2) => xs:string()
301+
};

0 commit comments

Comments
 (0)