From f572c439d6223eeedb140f775cd844c8ab0a11fd Mon Sep 17 00:00:00 2001 From: Gunther Rademacher Date: Tue, 25 Feb 2025 09:11:48 +0100 Subject: [PATCH 1/2] make fn:function-annotations return a sequence of single-entry maps --- .../main/java/org/basex/query/func/Function.java | 2 +- .../query/func/fn/FnFunctionAnnotations.java | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/basex-core/src/main/java/org/basex/query/func/Function.java b/basex-core/src/main/java/org/basex/query/func/Function.java index b9ecfcae9e..8ca5136ce5 100644 --- a/basex-core/src/main/java/org/basex/query/func/Function.java +++ b/basex-core/src/main/java/org/basex/query/func/Function.java @@ -310,7 +310,7 @@ ITEM_ZM, flag(HOF)), params(TIME_ZO, STRING_O, STRING_ZO, STRING_ZO, STRING_ZO), STRING_ZO), /** XQuery function. */ FUNCTION_ANNOTATIONS(FnFunctionAnnotations::new, "function-annotations(function)", - params(FUNCTION_O), MAP_O), + params(FUNCTION_O), MAP_ZM), /** XQuery function. */ FUNCTION_ARITY(FnFunctionArity::new, "function-arity(function)", params(FUNCTION_O), INTEGER_O), diff --git a/basex-core/src/main/java/org/basex/query/func/fn/FnFunctionAnnotations.java b/basex-core/src/main/java/org/basex/query/func/fn/FnFunctionAnnotations.java index a3e015dd31..f5a6a559c6 100644 --- a/basex-core/src/main/java/org/basex/query/func/fn/FnFunctionAnnotations.java +++ b/basex-core/src/main/java/org/basex/query/func/fn/FnFunctionAnnotations.java @@ -3,9 +3,11 @@ import org.basex.query.*; import org.basex.query.ann.*; import org.basex.query.func.*; +import org.basex.query.util.list.*; +import org.basex.query.value.*; import org.basex.query.value.item.*; import org.basex.query.value.map.*; -import org.basex.util.*; +import org.basex.query.value.seq.*; /** * Function implementation. @@ -15,13 +17,15 @@ */ public final class FnFunctionAnnotations extends StandardFunc { @Override - public XQMap item(final QueryContext qc, final InputInfo ii) throws QueryException { + public Value value(final QueryContext qc) throws QueryException { final FItem function = toFunction(arg(0), qc); - final MapBuilder mb = new MapBuilder(); - for(final Ann ann : function.annotations()) { - mb.put(ann.name(), ann.value()); + final AnnList anns = function.annotations(); + if(anns.isEmpty()) return Empty.VALUE; + final ValueBuilder vb = new ValueBuilder(qc); + for(final Ann ann : anns) { + vb.add(XQMap.singleton(ann.name(), ann.value())); } - return mb.map(); + return vb.value(); } } From 48d735aaae1b6efe16eea0d3318bb2c22ee843b1 Mon Sep 17 00:00:00 2001 From: Gunther Rademacher Date: Tue, 25 Feb 2025 09:28:33 +0100 Subject: [PATCH 2/2] adapt test to changed signature and behavior --- .../src/test/java/org/basex/query/func/FnModuleTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/basex-core/src/test/java/org/basex/query/func/FnModuleTest.java b/basex-core/src/test/java/org/basex/query/func/FnModuleTest.java index a0f1f2074e..456f39ac0d 100644 --- a/basex-core/src/test/java/org/basex/query/func/FnModuleTest.java +++ b/basex-core/src/test/java/org/basex/query/func/FnModuleTest.java @@ -1184,12 +1184,12 @@ public final class FnModuleTest extends SandboxTest { @Test public void functionAnnotations() { final Function func = FUNCTION_ANNOTATIONS; // queries - query(func.args(" true#0"), "{}"); + query(func.args(" true#0"), ""); query(func.args(" %local:x function() { }") + "=> " + _MAP_CONTAINS.args(" xs:QName('local:x')"), true); query(func.args(" %Q{uri}name('a', 'b') function() {}") + " (QName('uri', 'name'))", "a\nb"); - query(_MAP_SIZE.args(func.args(" %basex:inline %basex:lazy function() {}")), 2); + query(COUNT.args(func.args(" %basex:inline %basex:lazy function() {}")), 2); } /** Test method. */