Skip to content

Commit 89bbde1

Browse files
committed
[refactor] Allow caller control over lifetime of the result sequence, as only they can know when they are finished with it
1 parent 3c4a190 commit 89bbde1

83 files changed

Lines changed: 3570 additions & 2787 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

exist-core/pom.xml

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,7 +1108,8 @@
11081108
<include>src/test/java/org/exist/storage/util/PauseFunction.java</include>
11091109
<include>src/main/java/org/exist/test/ExistXmldbEmbeddedServer.java</include>
11101110
<include>src/main/java/org/exist/test/TransactionTestDSL.java</include>
1111-
<include>src/test/java/org/exist/test/XQueryCompilationTest.java</include>
1111+
<include>src/main/java/org/exist/test/XQueryAssertions.java</include>
1112+
<include>src/main/java/org/exist/test/XQueryCompilationTest.java</include>
11121113
<include>src/main/java/org/exist/test/runner/AbstractTestRunner.java</include>
11131114
<include>src/main/java/org/exist/test/runner/ExtTestAssumptionFailedFunction.java</include>
11141115
<include>src/main/java/org/exist/test/runner/ExtTestErrorFunction.java</include>
@@ -1223,6 +1224,7 @@
12231224
<include>src/test/java/org/exist/xmlrpc/XmlRpcTest.java</include>
12241225
<include>src/main/java/org/exist/xqj/Marshaller.java</include>
12251226
<include>src/test/java/org/exist/xqj/MarshallerTest.java</include>
1227+
<include>src/test/java/org/exist/xquery/AbsolutePathTests.java</include>
12261228
<include>src/main/java/org/exist/xquery/AbstractInternalModule.java</include>
12271229
<include>src/main/java/org/exist/xquery/ArrowOperator.java</include>
12281230
<include>src/test/java/org/exist/xquery/CardinalityTest.java</include>
@@ -1242,6 +1244,7 @@
12421244
<include>src/test/java/org/exist/xquery/ForwardReferenceTest.java</include>
12431245
<include>src/main/java/org/exist/xquery/Function.java</include>
12441246
<include>src/main/java/org/exist/xquery/FunctionFactory.java</include>
1247+
<include>src/test/java/org/exist/xquery/FunctionTypeInElementContentTest.java</include>
12451248
<include>src/main/java/org/exist/xquery/InlineFunction.java</include>
12461249
<include>src/main/java/org/exist/xquery/Intersect.java</include>
12471250
<include>src/test/java/org/exist/xquery/LexerTest.java</include>
@@ -1922,7 +1925,8 @@
19221925
<exclude>src/main/java/org/exist/test/ExistXmldbEmbeddedServer.java</exclude>
19231926
<exclude>src/main/java/org/exist/test/TransactionTestDSL.java</exclude>
19241927
<exclude>src/test/java/org/exist/test/Util.java</exclude>
1925-
<exclude>src/test/java/org/exist/test/XQueryCompilationTest.java</exclude>
1928+
<exclude>src/main/java/org/exist/test/XQueryAssertions.java</exclude>
1929+
<exclude>src/main/java/org/exist/test/XQueryCompilationTest.java</exclude>
19261930
<exclude>src/main/java/org/exist/test/runner/AbstractTestRunner.java</exclude>
19271931
<exclude>src/main/java/org/exist/test/runner/ExtTestAssumptionFailedFunction.java</exclude>
19281932
<exclude>src/main/java/org/exist/test/runner/ExtTestErrorFunction.java</exclude>
@@ -2054,6 +2058,7 @@
20542058
<exclude>src/test/java/org/exist/xmlrpc/XmlRpcTest.java</exclude>
20552059
<exclude>src/main/java/org/exist/xqj/Marshaller.java</exclude>
20562060
<exclude>src/test/java/org/exist/xqj/MarshallerTest.java</exclude>
2061+
<exclude>src/test/java/org/exist/xquery/AbsolutePathTests.java</exclude>
20572062
<exclude>src/main/java/org/exist/xquery/AbstractInternalModule.java</exclude>
20582063
<exclude>src/main/java/org/exist/xquery/ArrowOperator.java</exclude>
20592064
<exclude>src/test/java/org/exist/xquery/ArrowOperatorTest.java</exclude>
@@ -2076,6 +2081,7 @@
20762081
<exclude>src/test/java/org/exist/xquery/ForwardReferenceTest.java</exclude>
20772082
<exclude>src/main/java/org/exist/xquery/Function.java</exclude>
20782083
<exclude>src/main/java/org/exist/xquery/FunctionFactory.java</exclude>
2084+
<exclude>src/test/java/org/exist/xquery/FunctionTypeInElementContentTest.java</exclude>
20792085
<exclude>src/test/resources-filtered/org/exist/xquery/import-from-pkg-test.conf.xml</exclude>
20802086
<exclude>src/test/java/org/exist/xquery/ImportFromPkgTest.java</exclude>
20812087
<exclude>src/test/java/org/exist/xquery/ImportModuleTest.java</exclude>

exist-core/src/main/java/org/exist/collections/triggers/XQueryStartupTrigger.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,9 @@ private void executeQuery(final DBBroker broker, final String path) {
283283

284284
LOG.info("Executing XQuery Startup Trigger: {}", path);
285285

286-
final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, false, null, null, setupXqueryContextPreCompilation, null, null);
287-
288-
LOG.info("Executed XQuery Startup Trigger: {} in {}", path, queryResult.executionTime);
286+
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, false, null, null, setupXqueryContextPreCompilation, null, null)) {
287+
LOG.info("Executed XQuery Startup Trigger: {} in {}", path, queryResult.executionTime);
288+
}
289289
}
290290

291291
} catch (final Throwable t) {

exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -263,8 +263,7 @@ private void prepare(final TriggerEvent event, final DBBroker broker, final Txn
263263
declareExternalVariables(xqueryContext, TriggerPhase.BEFORE, event, src, dst, isCollection);
264264
};
265265

266-
try {
267-
final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, null, setupXqueryContextPreExecution, null, null);
266+
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, null, setupXqueryContextPreExecution, null, null)) {
268267

269268
if (LOG.isDebugEnabled()) {
270269
LOG.debug("Trigger fired for prepare in: {}", queryResult.executionTime);
@@ -296,8 +295,7 @@ private void finish(final TriggerEvent event, final DBBroker broker, final Txn t
296295
};
297296

298297
long executionTime = -1;
299-
try {
300-
final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, null, setupXqueryContextPreExecution, null, null);
298+
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, null, setupXqueryContextPreExecution, null, null)) {
301299
executionTime = queryResult.executionTime;
302300
} catch (final XPathException | IOException | PermissionDeniedException e) {
303301
LOG.error("Error during trigger finish", e);

exist-core/src/main/java/org/exist/http/AuditTrailSessionListener.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -150,10 +150,11 @@ private void executeXQuery(String xqueryResourcePath) {
150150
};
151151

152152
final Properties outputProperties = new Properties();
153-
final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, outputProperties, setupXqueryContextPreCompilation, null, null);
153+
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, outputProperties, setupXqueryContextPreCompilation, null, null)) {
154154

155-
if (LOG.isTraceEnabled()) {
156-
LOG.trace("XQuery execution results: {} in {}ms.", queryResult.result.toString(), queryResult.executionTime);
155+
if (LOG.isTraceEnabled()) {
156+
LOG.trace("XQuery execution results: {} in {}ms.", queryResult.result.toString(), queryResult.executionTime);
157+
}
157158
}
158159
}
159160
}

exist-core/src/main/java/org/exist/http/RESTServer.java

Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1409,24 +1409,25 @@ protected void search(final DBBroker broker, final Txn transaction, final String
14091409
@Nullable final Item contextItem = extractContextItem(contextItemParam);
14101410
final Sequence contextSequence = contextItem != null ? new ValueSequence(contextItem) : null;
14111411

1412-
final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, contextSequence, outputProperties, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution);
1412+
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, contextSequence, outputProperties, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution)) {
14131413

1414-
// special header to indicate that the query is not returned from cache
1415-
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
1414+
// special header to indicate that the query is not returned from cache
1415+
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
14161416

1417-
if (LOG.isDebugEnabled()) {
1418-
LOG.debug("Found {} in {}ms.", queryResult.result.getItemCount(), queryResult.executionTime);
1419-
}
1417+
if (LOG.isDebugEnabled()) {
1418+
LOG.debug("Found {} in {}ms.", queryResult.result.getItemCount(), queryResult.executionTime);
1419+
}
14201420

1421-
if (cache) {
1422-
final int sessionId = sessionManager.add(query, queryResult);
1423-
outputProperties.setProperty(Serializer.PROPERTY_SESSION_ID, Integer.toString(sessionId));
1424-
if (!response.isCommitted()) {
1425-
response.setIntHeader(SESSION_ID_HEADER, sessionId);
1421+
if (cache) {
1422+
final int sessionId = sessionManager.add(query, queryResult);
1423+
outputProperties.setProperty(Serializer.PROPERTY_SESSION_ID, Integer.toString(sessionId));
1424+
if (!response.isCommitted()) {
1425+
response.setIntHeader(SESSION_ID_HEADER, sessionId);
1426+
}
14261427
}
1427-
}
14281428

1429-
writeResults(response, broker, transaction, queryResult, howmany, start, typed, outputProperties, wrap);
1429+
writeResults(response, broker, transaction, queryResult, howmany, start, typed, outputProperties, wrap);
1430+
}
14301431

14311432
} catch (final IOException e) {
14321433
throw new BadRequestException(e.getMessage(), e);
@@ -1623,18 +1624,16 @@ private void executeXQuery(final DBBroker broker, final Txn transaction, final D
16231624
HTTPUtils.addLastModifiedHeader(queryResult.result, xqueryContext);
16241625
};
16251626

1626-
final XQueryUtil.QueryResult queryResult;
1627-
try {
1628-
queryResult = XQueryUtil.query(broker, source, true, null, outputProperties, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution);
1627+
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, outputProperties, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution)) {
1628+
1629+
// Special header to indicate whether the compiled query is returned from the cache
1630+
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
1631+
1632+
final boolean wrap = "yes".equals(outputProperties.getProperty("_wrap"));
1633+
writeResults(response, broker, transaction, queryResult, -1, 1, false, outputProperties, wrap);
16291634
} catch (final IOException e) {
16301635
throw new BadRequestException("Failed to read query from " + resource.getURI(), e);
16311636
}
1632-
1633-
// Special header to indicate whether the compiled query is returned from the cache
1634-
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
1635-
1636-
final boolean wrap = "yes".equals(outputProperties.getProperty("_wrap"));
1637-
writeResults(response, broker, transaction, queryResult, -1, 1, false, outputProperties, wrap);
16381637
}
16391638

16401639
/**
@@ -1684,17 +1683,15 @@ private void executeXProc(final DBBroker broker, final Txn transaction, final Do
16841683
};
16851684

16861685
// execute query
1687-
final XQueryUtil.QueryResult queryResult;
1688-
try {
1689-
queryResult = XQueryUtil.query(broker, source, true, null, null, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution);
1686+
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, null, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution)) {
1687+
1688+
// special header to indicate that the query is not returned from cache
1689+
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
1690+
1691+
writeResults(response, broker, transaction, queryResult, -1, 1, false, outputProperties, false);
16901692
} catch (final IOException e) {
16911693
throw new BadRequestException("Failed to read query from " + source.getURL(), e);
16921694
}
1693-
1694-
// special header to indicate that the query is not returned from cache
1695-
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
1696-
1697-
writeResults(response, broker, transaction, queryResult, -1, 1, false, outputProperties, false);
16981695
}
16991696

17001697
public void setCreatedAndLastModifiedHeaders(

0 commit comments

Comments
 (0)