Skip to content

Commit 015c5d2

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 533e8b6 commit 015c5d2

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
@@ -1073,7 +1073,8 @@
10731073
<include>src/test/java/org/exist/storage/util/PauseFunction.java</include>
10741074
<include>src/main/java/org/exist/test/ExistXmldbEmbeddedServer.java</include>
10751075
<include>src/main/java/org/exist/test/TransactionTestDSL.java</include>
1076-
<include>src/test/java/org/exist/test/XQueryCompilationTest.java</include>
1076+
<include>src/main/java/org/exist/test/XQueryAssertions.java</include>
1077+
<include>src/main/java/org/exist/test/XQueryCompilationTest.java</include>
10771078
<include>src/main/java/org/exist/test/runner/AbstractTestRunner.java</include>
10781079
<include>src/main/java/org/exist/test/runner/ExtTestAssumptionFailedFunction.java</include>
10791080
<include>src/main/java/org/exist/test/runner/ExtTestErrorFunction.java</include>
@@ -1187,6 +1188,7 @@
11871188
<include>src/test/java/org/exist/xmlrpc/XmlRpcTest.java</include>
11881189
<include>src/main/java/org/exist/xqj/Marshaller.java</include>
11891190
<include>src/test/java/org/exist/xqj/MarshallerTest.java</include>
1191+
<include>src/test/java/org/exist/xquery/AbsolutePathTests.java</include>
11901192
<include>src/main/java/org/exist/xquery/AbstractInternalModule.java</include>
11911193
<include>src/main/java/org/exist/xquery/ArrowOperator.java</include>
11921194
<include>src/test/java/org/exist/xquery/CardinalityTest.java</include>
@@ -1208,6 +1210,7 @@
12081210
<include>src/test/java/org/exist/xquery/ForwardReferenceTest.java</include>
12091211
<include>src/main/java/org/exist/xquery/Function.java</include>
12101212
<include>src/main/java/org/exist/xquery/FunctionFactory.java</include>
1213+
<include>src/test/java/org/exist/xquery/FunctionTypeInElementContentTest.java</include>
12111214
<include>src/main/java/org/exist/xquery/InlineFunction.java</include>
12121215
<include>src/test/java/org/exist/xquery/InternalModuleTest.java</include>
12131216
<include>src/main/java/org/exist/xquery/Intersect.java</include>
@@ -1865,7 +1868,8 @@
18651868
<exclude>src/main/java/org/exist/test/ExistXmldbEmbeddedServer.java</exclude>
18661869
<exclude>src/main/java/org/exist/test/TransactionTestDSL.java</exclude>
18671870
<exclude>src/test/java/org/exist/test/Util.java</exclude>
1868-
<exclude>src/test/java/org/exist/test/XQueryCompilationTest.java</exclude>
1871+
<exclude>src/main/java/org/exist/test/XQueryAssertions.java</exclude>
1872+
<exclude>src/main/java/org/exist/test/XQueryCompilationTest.java</exclude>
18691873
<exclude>src/main/java/org/exist/test/runner/AbstractTestRunner.java</exclude>
18701874
<exclude>src/main/java/org/exist/test/runner/ExtTestAssumptionFailedFunction.java</exclude>
18711875
<exclude>src/main/java/org/exist/test/runner/ExtTestErrorFunction.java</exclude>
@@ -1996,6 +2000,7 @@
19962000
<exclude>src/test/java/org/exist/xmlrpc/XmlRpcTest.java</exclude>
19972001
<exclude>src/main/java/org/exist/xqj/Marshaller.java</exclude>
19982002
<exclude>src/test/java/org/exist/xqj/MarshallerTest.java</exclude>
2003+
<exclude>src/test/java/org/exist/xquery/AbsolutePathTests.java</exclude>
19992004
<exclude>src/main/java/org/exist/xquery/AbstractInternalModule.java</exclude>
20002005
<exclude>src/main/java/org/exist/xquery/ArrowOperator.java</exclude>
20012006
<exclude>src/test/java/org/exist/xquery/ArrowOperatorTest.java</exclude>
@@ -2020,6 +2025,7 @@
20202025
<exclude>src/test/java/org/exist/xquery/ForwardReferenceTest.java</exclude>
20212026
<exclude>src/main/java/org/exist/xquery/Function.java</exclude>
20222027
<exclude>src/main/java/org/exist/xquery/FunctionFactory.java</exclude>
2028+
<exclude>src/test/java/org/exist/xquery/FunctionTypeInElementContentTest.java</exclude>
20232029
<exclude>src/test/resources-filtered/org/exist/xquery/import-from-pkg-test.conf.xml</exclude>
20242030
<exclude>src/test/java/org/exist/xquery/ImportFromPkgTest.java</exclude>
20252031
<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)