From 655ed68acf1aa396770aafb2f6a95927deb15ef6 Mon Sep 17 00:00:00 2001 From: Laurettta Date: Tue, 3 Nov 2026 09:30:53 +0000 Subject: [PATCH] [hotfix] report the first wrong let variable type Closes https://github.com/eXist-db/exist/issues/5315 --- .../main/java/org/exist/xquery/LetExpr.java | 3 +-- .../java/org/exist/xquery/XQueryTest.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/exist-core/src/main/java/org/exist/xquery/LetExpr.java b/exist-core/src/main/java/org/exist/xquery/LetExpr.java index 50f08b6014..b4bb263395 100644 --- a/exist-core/src/main/java/org/exist/xquery/LetExpr.java +++ b/exist-core/src/main/java/org/exist/xquery/LetExpr.java @@ -108,8 +108,6 @@ public Sequence eval(Sequence contextSequence, Item contextItem) var.setContextDocs(inputSequence.getContextDocSet()); registerUpdateListener(in); - resultSequence = returnExpr.eval(contextSequence, null); - if (sequenceType != null) { Cardinality actualCardinality; if (var.getValue().isEmpty()) {actualCardinality = Cardinality.EMPTY_SEQUENCE;} @@ -166,6 +164,7 @@ public Sequence eval(Sequence contextSequence, Item contextItem) } } } + resultSequence = returnExpr.eval(contextSequence, null); } finally { // Restore the local variable stack context.popLocalVariables(mark, resultSequence); diff --git a/exist-core/src/test/java/org/exist/xquery/XQueryTest.java b/exist-core/src/test/java/org/exist/xquery/XQueryTest.java index 0d0372f762..b06dc77204 100644 --- a/exist-core/src/test/java/org/exist/xquery/XQueryTest.java +++ b/exist-core/src/test/java/org/exist/xquery/XQueryTest.java @@ -2233,6 +2233,31 @@ public void noErrorNeOperatorWithSequence_1740883() { } } + @Test + public void letTypeErrorReportedOnFirstVariable () throws XMLDBException { + try{ + final String query = "let $input as xs:string := () " + + "let $output as xs:string := $input " + + "return $output"; + + try (final Collection testCollection = getTestCollection()) { + final XPathQueryService service = testCollection.getService(XPathQueryService.class); + + try(final EXistResourceSet result = (EXistResourceSet) service.query(query)) { + // needed to ensure that result is closed + + } + + fail("Expected XPTY0004 error for $input"); + } + } catch (XMLDBException e) { + if (!e.getMessage().contains("$input")) { + LOG.error(e.getMessage(), e); + fail(e.getMessage()); + } + } + } + /** * http://sourceforge.net/support/tracker.php?aid=1740885 */