mirror of https://gitee.com/bigwinds/arangodb
allow killing of Collect operations
This commit is contained in:
parent
0a1f1e5c4a
commit
c577b8616e
|
@ -293,6 +293,11 @@ int SortedCollectBlock::getOrSkipSome(size_t atLeast, size_t atMost,
|
||||||
|
|
||||||
while (skipped < atMost) {
|
while (skipped < atMost) {
|
||||||
// read the next input row
|
// read the next input row
|
||||||
|
TRI_IF_FAILURE("SortedCollectBlock::getOrSkipSomeOuter") {
|
||||||
|
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
||||||
|
}
|
||||||
|
|
||||||
|
throwIfKilled(); // check if we were aborted
|
||||||
|
|
||||||
bool newGroup = false;
|
bool newGroup = false;
|
||||||
if (!isTotalAggregation) {
|
if (!isTotalAggregation) {
|
||||||
|
@ -384,6 +389,8 @@ int SortedCollectBlock::getOrSkipSome(size_t atLeast, size_t atMost,
|
||||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throwIfKilled();
|
||||||
|
|
||||||
emitGroup(cur, res.get(), skipped);
|
emitGroup(cur, res.get(), skipped);
|
||||||
++skipped;
|
++skipped;
|
||||||
res->shrink(skipped);
|
res->shrink(skipped);
|
||||||
|
@ -703,6 +710,12 @@ int HashedCollectBlock::getOrSkipSome(size_t atLeast, size_t atMost,
|
||||||
|
|
||||||
try {
|
try {
|
||||||
while (skipped < atMost) {
|
while (skipped < atMost) {
|
||||||
|
TRI_IF_FAILURE("HashedCollectBlock::getOrSkipSomeOuter") {
|
||||||
|
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
||||||
|
}
|
||||||
|
|
||||||
|
throwIfKilled(); // check if we were aborted
|
||||||
|
|
||||||
groupValues.clear();
|
groupValues.clear();
|
||||||
|
|
||||||
// for hashing simply re-use the aggregate registers, without cloning
|
// for hashing simply re-use the aggregate registers, without cloning
|
||||||
|
@ -788,6 +801,8 @@ int HashedCollectBlock::getOrSkipSome(size_t atLeast, size_t atMost,
|
||||||
TRI_IF_FAILURE("HashedCollectBlock::getOrSkipSome") {
|
TRI_IF_FAILURE("HashedCollectBlock::getOrSkipSome") {
|
||||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
THROW_ARANGO_EXCEPTION(TRI_ERROR_DEBUG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throwIfKilled();
|
||||||
}
|
}
|
||||||
|
|
||||||
++skipped;
|
++skipped;
|
||||||
|
|
|
@ -145,6 +145,12 @@ function ahuacatlFailureSuite () {
|
||||||
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value INTO g RETURN [ key, g ]");
|
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value INTO g RETURN [ key, g ]");
|
||||||
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value2 INTO g RETURN [ key, g ]");
|
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value2 INTO g RETURN [ key, g ]");
|
||||||
assertFailingQuery("FOR i IN 1..10000 COLLECT key = i INTO g RETURN [ key, g ]");
|
assertFailingQuery("FOR i IN 1..10000 COLLECT key = i INTO g RETURN [ key, g ]");
|
||||||
|
|
||||||
|
internal.debugClearFailAt();
|
||||||
|
internal.debugSetFailAt("SortedCollectBlock::getOrSkipSomeOuter");
|
||||||
|
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value INTO g RETURN [ key, g ]");
|
||||||
|
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value2 INTO g RETURN [ key, g ]");
|
||||||
|
assertFailingQuery("FOR i IN 1..10000 COLLECT key = i INTO g RETURN [ key, g ]");
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -167,6 +173,12 @@ function ahuacatlFailureSuite () {
|
||||||
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value RETURN key");
|
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value RETURN key");
|
||||||
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value2 RETURN key");
|
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value2 RETURN key");
|
||||||
assertFailingQuery("FOR i IN 1..10000 COLLECT key = i RETURN key");
|
assertFailingQuery("FOR i IN 1..10000 COLLECT key = i RETURN key");
|
||||||
|
|
||||||
|
internal.debugClearFailAt();
|
||||||
|
internal.debugSetFailAt("HashedCollectBlock::getOrSkipSomeOuter");
|
||||||
|
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value RETURN key");
|
||||||
|
assertFailingQuery("FOR i IN " + c.name() + " COLLECT key = i.value2 RETURN key");
|
||||||
|
assertFailingQuery("FOR i IN 1..10000 COLLECT key = i RETURN key");
|
||||||
},
|
},
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue