Skip to content

Commit 6a09999

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 4f296b6 commit 6a09999

82 files changed

Lines changed: 3518 additions & 2743 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
@@ -1079,7 +1079,8 @@
10791079
<include>src/test/java/org/exist/storage/util/PauseFunction.java</include>
10801080
<include>src/main/java/org/exist/test/ExistXmldbEmbeddedServer.java</include>
10811081
<include>src/main/java/org/exist/test/TransactionTestDSL.java</include>
1082-
<include>src/test/java/org/exist/test/XQueryCompilationTest.java</include>
1082+
<include>src/main/java/org/exist/test/XQueryAssertions.java</include>
1083+
<include>src/main/java/org/exist/test/XQueryCompilationTest.java</include>
10831084
<include>src/main/java/org/exist/test/runner/AbstractTestRunner.java</include>
10841085
<include>src/main/java/org/exist/test/runner/ExtTestAssumptionFailedFunction.java</include>
10851086
<include>src/main/java/org/exist/test/runner/ExtTestErrorFunction.java</include>
@@ -1194,6 +1195,7 @@
11941195
<include>src/test/java/org/exist/xmlrpc/XmlRpcTest.java</include>
11951196
<include>src/main/java/org/exist/xqj/Marshaller.java</include>
11961197
<include>src/test/java/org/exist/xqj/MarshallerTest.java</include>
1198+
<include>src/test/java/org/exist/xquery/AbsolutePathTests.java</include>
11971199
<include>src/main/java/org/exist/xquery/AbstractInternalModule.java</include>
11981200
<include>src/main/java/org/exist/xquery/ArrowOperator.java</include>
11991201
<include>src/test/java/org/exist/xquery/CardinalityTest.java</include>
@@ -1215,6 +1217,7 @@
12151217
<include>src/test/java/org/exist/xquery/ForwardReferenceTest.java</include>
12161218
<include>src/main/java/org/exist/xquery/Function.java</include>
12171219
<include>src/main/java/org/exist/xquery/FunctionFactory.java</include>
1220+
<include>src/test/java/org/exist/xquery/FunctionTypeInElementContentTest.java</include>
12181221
<include>src/main/java/org/exist/xquery/InlineFunction.java</include>
12191222
<include>src/test/java/org/exist/xquery/InternalModuleTest.java</include>
12201223
<include>src/main/java/org/exist/xquery/Intersect.java</include>
@@ -1880,7 +1883,8 @@
18801883
<exclude>src/main/java/org/exist/test/ExistXmldbEmbeddedServer.java</exclude>
18811884
<exclude>src/main/java/org/exist/test/TransactionTestDSL.java</exclude>
18821885
<exclude>src/test/java/org/exist/test/Util.java</exclude>
1883-
<exclude>src/test/java/org/exist/test/XQueryCompilationTest.java</exclude>
1886+
<exclude>src/main/java/org/exist/test/XQueryAssertions.java</exclude>
1887+
<exclude>src/main/java/org/exist/test/XQueryCompilationTest.java</exclude>
18841888
<exclude>src/main/java/org/exist/test/runner/AbstractTestRunner.java</exclude>
18851889
<exclude>src/main/java/org/exist/test/runner/ExtTestAssumptionFailedFunction.java</exclude>
18861890
<exclude>src/main/java/org/exist/test/runner/ExtTestErrorFunction.java</exclude>
@@ -2012,6 +2016,7 @@
20122016
<exclude>src/test/java/org/exist/xmlrpc/XmlRpcTest.java</exclude>
20132017
<exclude>src/main/java/org/exist/xqj/Marshaller.java</exclude>
20142018
<exclude>src/test/java/org/exist/xqj/MarshallerTest.java</exclude>
2019+
<exclude>src/test/java/org/exist/xquery/AbsolutePathTests.java</exclude>
20152020
<exclude>src/main/java/org/exist/xquery/AbstractInternalModule.java</exclude>
20162021
<exclude>src/main/java/org/exist/xquery/ArrowOperator.java</exclude>
20172022
<exclude>src/test/java/org/exist/xquery/ArrowOperatorTest.java</exclude>
@@ -2036,6 +2041,7 @@
20362041
<exclude>src/test/java/org/exist/xquery/ForwardReferenceTest.java</exclude>
20372042
<exclude>src/main/java/org/exist/xquery/Function.java</exclude>
20382043
<exclude>src/main/java/org/exist/xquery/FunctionFactory.java</exclude>
2044+
<exclude>src/test/java/org/exist/xquery/FunctionTypeInElementContentTest.java</exclude>
20392045
<exclude>src/test/resources-filtered/org/exist/xquery/import-from-pkg-test.conf.xml</exclude>
20402046
<exclude>src/test/java/org/exist/xquery/ImportFromPkgTest.java</exclude>
20412047
<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
@@ -284,9 +284,9 @@ private void executeQuery(final DBBroker broker, final String path) {
284284

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

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

292292
} 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
@@ -1386,24 +1386,25 @@ protected void search(final DBBroker broker, final Txn transaction, final String
13861386
@Nullable final Item contextItem = extractContextItem(contextItemParam);
13871387
final Sequence contextSequence = contextItem != null ? new ValueSequence(contextItem) : null;
13881388

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

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

1394-
if (LOG.isDebugEnabled()) {
1395-
LOG.debug("Found {} in {}ms.", queryResult.result.getItemCount(), queryResult.executionTime);
1396-
}
1394+
if (LOG.isDebugEnabled()) {
1395+
LOG.debug("Found {} in {}ms.", queryResult.result.getItemCount(), queryResult.executionTime);
1396+
}
13971397

1398-
if (cache) {
1399-
final int sessionId = sessionManager.add(query, queryResult);
1400-
outputProperties.setProperty(Serializer.PROPERTY_SESSION_ID, Integer.toString(sessionId));
1401-
if (!response.isCommitted()) {
1402-
response.setIntHeader(SESSION_ID_HEADER, sessionId);
1398+
if (cache) {
1399+
final int sessionId = sessionManager.add(query, queryResult);
1400+
outputProperties.setProperty(Serializer.PROPERTY_SESSION_ID, Integer.toString(sessionId));
1401+
if (!response.isCommitted()) {
1402+
response.setIntHeader(SESSION_ID_HEADER, sessionId);
1403+
}
14031404
}
1404-
}
14051405

1406-
writeResults(response, broker, transaction, queryResult, howmany, start, typed, outputProperties, wrap);
1406+
writeResults(response, broker, transaction, queryResult, howmany, start, typed, outputProperties, wrap);
1407+
}
14071408

14081409
} catch (final IOException e) {
14091410
throw new BadRequestException(e.getMessage(), e);
@@ -1600,18 +1601,16 @@ private void executeXQuery(final DBBroker broker, final Txn transaction, final D
16001601
HTTPUtils.addLastModifiedHeader(queryResult.result, xqueryContext);
16011602
};
16021603

1603-
final XQueryUtil.QueryResult queryResult;
1604-
try {
1605-
queryResult = XQueryUtil.query(broker, source, true, null, outputProperties, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution);
1604+
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, outputProperties, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution)) {
1605+
1606+
// Special header to indicate whether the compiled query is returned from the cache
1607+
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
1608+
1609+
final boolean wrap = "yes".equals(outputProperties.getProperty("_wrap"));
1610+
writeResults(response, broker, transaction, queryResult, -1, 1, false, outputProperties, wrap);
16061611
} catch (final IOException e) {
16071612
throw new BadRequestException("Failed to read query from " + resource.getURI(), e);
16081613
}
1609-
1610-
// Special header to indicate whether the compiled query is returned from the cache
1611-
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
1612-
1613-
final boolean wrap = "yes".equals(outputProperties.getProperty("_wrap"));
1614-
writeResults(response, broker, transaction, queryResult, -1, 1, false, outputProperties, wrap);
16151614
}
16161615

16171616
/**
@@ -1661,17 +1660,15 @@ private void executeXProc(final DBBroker broker, final Txn transaction, final Do
16611660
};
16621661

16631662
// execute query
1664-
final XQueryUtil.QueryResult queryResult;
1665-
try {
1666-
queryResult = XQueryUtil.query(broker, source, true, null, null, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution);
1663+
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, null, setupXqueryContextPreCompilation, setupXqueryContextPreExecution, setupXqueryContextPostExecution)) {
1664+
1665+
// special header to indicate that the query is not returned from cache
1666+
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
1667+
1668+
writeResults(response, broker, transaction, queryResult, -1, 1, false, outputProperties, false);
16671669
} catch (final IOException e) {
16681670
throw new BadRequestException("Failed to read query from " + source.getURL(), e);
16691671
}
1670-
1671-
// special header to indicate that the query is not returned from cache
1672-
response.setHeader(XQUERY_CACHED_RESPONSE_HEADER, queryResult.compilationTime == XQueryUtil.QueryResult.RETRIEVED_CACHED_COMPILED_QUERY ? "true" : "false");
1673-
1674-
writeResults(response, broker, transaction, queryResult, -1, 1, false, outputProperties, false);
16751672
}
16761673

16771674
public void setCreatedAndLastModifiedHeaders(

0 commit comments

Comments
 (0)