Skip to content

Commit a00a969

Browse files
authored
Merge pull request #4497 from evolvedbinary/hotfix/empty-sequence-skipping
2 parents 42c05ac + 5e23335 commit a00a969

File tree

3 files changed

+32
-2
lines changed

3 files changed

+32
-2
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,8 @@ public Expression simplify() {
193193
return this;
194194
}
195195

196+
@Override
197+
public boolean evalNextExpressionOnEmptyContextSequence() {
198+
return true;
199+
}
196200
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,8 @@ public Sequence eval(Sequence contextSequence, final Item contextItem) throws XP
229229
//TODO : let the parser do it ? -pb
230230
boolean gotAtomicResult = false;
231231
Expression prev = null;
232-
for (final Expression step : steps) {
232+
for (int stepIdx = 0; stepIdx < steps.size(); stepIdx++) {
233+
final Expression step = steps.get(stepIdx);
233234
prev = expr;
234235
expr = step;
235236
context.getWatchDog().proceed(expr);
@@ -313,7 +314,7 @@ public Sequence eval(Sequence contextSequence, final Item contextItem) throws XP
313314
* return true when {@link Expression#evalNextExpressionOnEmptyContextSequence()}
314315
* is called to indicate that.
315316
*/
316-
if (result.isEmpty() && !step.evalNextExpressionOnEmptyContextSequence()) {
317+
if (result.isEmpty() && stepIdx < steps.size() - 1 && !step.evalNextExpressionOnEmptyContextSequence()) {
317318
break;
318319
}
319320
}

exist-core/src/test/java/org/exist/xquery/XQueryFunctionsTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,4 +1030,29 @@ public void defaultLanguage() throws XMLDBException {
10301030
final String defaultLanguage = (String) result.getResource(0).getContent();
10311031
assertEquals(Locale.getDefault().getLanguage(), defaultLanguage);
10321032
}
1033+
1034+
@Test
1035+
public void enclosedExpression() throws XMLDBException {
1036+
ResourceSet result = existEmbeddedServer.executeQuery("<abc>{()}{123}</abc>");
1037+
assertEquals(1, result.getSize());
1038+
String text = (String) result.getResource(0).getContent();
1039+
assertEquals("<abc>123</abc>", text);
1040+
1041+
result = existEmbeddedServer.executeQuery("<abc>{(), 123}</abc>");
1042+
assertEquals(1, result.getSize());
1043+
text = (String) result.getResource(0).getContent();
1044+
assertEquals("<abc>123</abc>", text);
1045+
1046+
result = existEmbeddedServer.executeQuery("<abc>{()}123</abc>");
1047+
assertEquals(1, result.getSize());
1048+
text = (String) result.getResource(0).getContent();
1049+
assertEquals("<abc>123</abc>", text);
1050+
1051+
result = existEmbeddedServer.executeQuery("<root>{'time '}{()}{'is: '}{current-time()}</root>");
1052+
assertEquals(1, result.getSize());
1053+
text = (String) result.getResource(0).getContent();
1054+
assertTrue(text.startsWith("<root>time is: "));
1055+
assertTrue(text.length() > 35);
1056+
assertTrue(text.endsWith("</root>"));
1057+
}
10331058
}

0 commit comments

Comments
 (0)