1
0
Fork 0

bug-fix/iresearch-error-propagation (#9001)

* use result instead of bool

* WIP: use arangodb::Results in more places

* WIP: fix unittests

* fix tests
This commit is contained in:
Jan Christoph Uhde 2019-05-17 18:00:29 +02:00 committed by Andrey Abramov
parent 3ccaabc2f5
commit d194cfc31e
7 changed files with 487 additions and 503 deletions

View File

@ -390,11 +390,12 @@ void IResearchViewExecutorBase<Impl, Traits>::reset() {
if (infos().volatileFilter() || !_isInitialized) { // `_volatileSort` implies `_volatileFilter`
irs::Or root;
if (!FilterFactory::filter(&root, queryCtx, infos().filterCondition())) {
auto rv = FilterFactory::filter(&root, queryCtx, infos().filterCondition());
if (rv.fail()) {
THROW_ARANGO_EXCEPTION_MESSAGE(
TRI_ERROR_BAD_PARAMETER,
"failed to build filter while querying arangosearch view, query '" +
infos().filterCondition().toVelocyPack(true)->toJson() + "'");
infos().filterCondition().toVelocyPack(true)->toJson() + "': " + rv.errorMessage());
}
if (infos().volatileSort() || !_isInitialized) {

View File

@ -116,15 +116,17 @@ bool optimizeSearchCondition(IResearchViewNode& viewNode, Query& query, Executio
}
// check filter condition
auto const conditionValid = !searchCondition.root() || FilterFactory::filter(
nullptr,
{ query.trx(), nullptr, nullptr, nullptr, &viewNode.outVariable() },
*searchCondition.root()
);
auto const conditionValid = !searchCondition.root();
if (!conditionValid) {
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_QUERY_PARSE,
"unsupported SEARCH condition");
if(!conditionValid) {
auto filterCreated = FilterFactory::filter(
nullptr,
{ query.trx(), nullptr, nullptr, nullptr, &viewNode.outVariable() },
*searchCondition.root()
);
if(filterCreated.fail()){
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_QUERY_PARSE, "unsupported SEARCH condition: " + filterCreated.errorMessage());
}
}
if (!searchCondition.isEmpty()) {
@ -133,7 +135,7 @@ bool optimizeSearchCondition(IResearchViewNode& viewNode, Query& query, Executio
return true;
}
bool optimizeSort(IResearchViewNode& viewNode, ExecutionPlan* plan) {
TRI_ASSERT(viewNode.view());
auto& primarySort = ::primarySort(*viewNode.view());
@ -154,7 +156,7 @@ bool optimizeSort(IResearchViewNode& viewNode, ExecutionPlan* plan) {
// we are at the bottom end of the plan
return false;
}
if (current->getType() == EN::ENUMERATE_IRESEARCH_VIEW ||
current->getType() == EN::ENUMERATE_COLLECTION ||
current->getType() == EN::TRAVERSAL ||
@ -165,7 +167,7 @@ bool optimizeSort(IResearchViewNode& viewNode, ExecutionPlan* plan) {
// and may as well change the sort order, so let's better abort here
return false;
}
if (current->getType() == EN::CALCULATION) {
// pick up the meanings of variables as we walk the plan
variableDefinitions.emplace(
@ -177,7 +179,7 @@ bool optimizeSort(IResearchViewNode& viewNode, ExecutionPlan* plan) {
// from here on, we are only interested in sorts
continue;
}
std::vector<std::pair<Variable const*, bool>> sorts;
auto* sortNode = ExecutionNode::castTo<SortNode*>(current);
@ -185,13 +187,13 @@ bool optimizeSort(IResearchViewNode& viewNode, ExecutionPlan* plan) {
sorts.reserve(sortElements.size());
for (auto& it : sortElements) {
// note: in contrast to regular indexes, views support sorting in different
// directions for multiple fields (e.g. SORT doc.a ASC, doc.b DESC).
// note: in contrast to regular indexes, views support sorting in different
// directions for multiple fields (e.g. SORT doc.a ASC, doc.b DESC).
// this is not supported by indexes
sorts.emplace_back(it.var, it.ascending);
}
SortCondition sortCondition(plan,
SortCondition sortCondition(plan,
sorts,
std::vector<std::vector<arangodb::basics::AttributeName>>(),
variableDefinitions);
@ -200,7 +202,7 @@ bool optimizeSort(IResearchViewNode& viewNode, ExecutionPlan* plan) {
// unusable sort condition
return false;
}
// sort condition found, and sorting only by attributes!
if (sortCondition.numAttributes() > primarySort.size()) {
@ -208,7 +210,7 @@ bool optimizeSort(IResearchViewNode& viewNode, ExecutionPlan* plan) {
// is sorted by. we cannot optimize in this case
return false;
}
// check if all sort conditions match
for (size_t i = 0; i < sortElements.size(); ++i) {
if (sortElements[i].ascending != primarySort.direction(i)) {
@ -225,7 +227,7 @@ bool optimizeSort(IResearchViewNode& viewNode, ExecutionPlan* plan) {
// the sort is not covered by the view
return false;
}
// we are almost done... but we need to do a final check and verify that our
// sort node itself is not followed by another node that injects more data into
// the result or that re-sorts it
@ -297,7 +299,7 @@ void handleViewsRule(arangodb::aql::Optimizer* opt,
// register replaced scorers to be evaluated by corresponding view nodes
nodes.clear();
plan->findNodesOfType(nodes, EN::ENUMERATE_IRESEARCH_VIEW, true);
auto& query = *plan->getAst()->query();
std::vector<Scorer> scorers;

File diff suppressed because it is too large Load Diff

View File

@ -50,7 +50,7 @@ struct FilterFactory {
/// @brief determine if the 'node' can be converted into an iresearch filter
/// if 'filter' != nullptr then also append the iresearch filter there
////////////////////////////////////////////////////////////////////////////////
static bool filter(irs::boolean_filter* filter, QueryContext const& ctx,
static arangodb::Result filter(irs::boolean_filter* filter, QueryContext const& ctx,
arangodb::aql::AstNode const& node);
}; // FilterFactory

View File

@ -833,7 +833,7 @@ SECTION("UnaryNot") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -858,7 +858,7 @@ SECTION("UnaryNot") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -915,7 +915,7 @@ SECTION("UnaryNot") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -940,7 +940,7 @@ SECTION("UnaryNot") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -997,7 +997,7 @@ SECTION("UnaryNot") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -1022,7 +1022,7 @@ SECTION("UnaryNot") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -1079,7 +1079,7 @@ SECTION("UnaryNot") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)).ok());
}
// iteratorForCondition
@ -1105,7 +1105,7 @@ SECTION("UnaryNot") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
assertFilterBoost(expected, actual);
}
@ -1163,7 +1163,7 @@ SECTION("UnaryNot") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -1188,7 +1188,7 @@ SECTION("UnaryNot") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -1245,7 +1245,7 @@ SECTION("UnaryNot") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -1272,7 +1272,7 @@ SECTION("UnaryNot") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
assertFilterBoost(expected, actual);
}
@ -1330,7 +1330,7 @@ SECTION("UnaryNot") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -1355,7 +1355,7 @@ SECTION("UnaryNot") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -1793,7 +1793,7 @@ SECTION("BinaryOr") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -1821,7 +1821,7 @@ SECTION("BinaryOr") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -1879,7 +1879,7 @@ SECTION("BinaryOr") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -1908,7 +1908,7 @@ SECTION("BinaryOr") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
assertFilterBoost(expected, actual);
}
@ -2078,7 +2078,7 @@ SECTION("BinaryAnd") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2106,7 +2106,7 @@ SECTION("BinaryAnd") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -2320,7 +2320,7 @@ SECTION("BinaryAnd") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2350,7 +2350,7 @@ SECTION("BinaryAnd") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -2408,7 +2408,7 @@ SECTION("BinaryAnd") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2442,7 +2442,7 @@ SECTION("BinaryAnd") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
assertFilterBoost(expected, actual);
}
@ -2595,7 +2595,7 @@ SECTION("BinaryAnd") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2625,7 +2625,7 @@ SECTION("BinaryAnd") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -2715,7 +2715,7 @@ SECTION("BinaryAnd") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2745,7 +2745,7 @@ SECTION("BinaryAnd") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}
@ -3720,7 +3720,7 @@ SECTION("BinaryAnd") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -3748,7 +3748,7 @@ SECTION("BinaryAnd") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
}
}

View File

@ -623,7 +623,7 @@ SECTION("BinaryIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -640,7 +640,7 @@ SECTION("BinaryIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -731,7 +731,7 @@ SECTION("BinaryIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -748,7 +748,7 @@ SECTION("BinaryIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -839,7 +839,7 @@ SECTION("BinaryIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -856,7 +856,7 @@ SECTION("BinaryIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -946,7 +946,7 @@ SECTION("BinaryIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -963,7 +963,7 @@ SECTION("BinaryIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -1054,7 +1054,7 @@ SECTION("BinaryIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -1071,7 +1071,7 @@ SECTION("BinaryIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -1157,7 +1157,7 @@ SECTION("BinaryIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -1174,7 +1174,7 @@ SECTION("BinaryIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -2495,7 +2495,7 @@ SECTION("BinaryNotIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2512,7 +2512,7 @@ SECTION("BinaryNotIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -2609,7 +2609,7 @@ SECTION("BinaryNotIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2626,7 +2626,7 @@ SECTION("BinaryNotIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -2723,7 +2723,7 @@ SECTION("BinaryNotIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2740,7 +2740,7 @@ SECTION("BinaryNotIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -2837,7 +2837,7 @@ SECTION("BinaryNotIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2854,7 +2854,7 @@ SECTION("BinaryNotIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -2952,7 +2952,7 @@ SECTION("BinaryNotIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -2969,7 +2969,7 @@ SECTION("BinaryNotIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -3065,7 +3065,7 @@ SECTION("BinaryNotIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -3082,7 +3082,7 @@ SECTION("BinaryNotIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());
@ -3171,7 +3171,7 @@ SECTION("BinaryNotIn") {
// supportsFilterCondition
{
arangodb::iresearch::QueryContext const ctx{ nullptr, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -3188,7 +3188,7 @@ SECTION("BinaryNotIn") {
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
{
CHECK(1 == actual.size());

View File

@ -382,7 +382,6 @@ arangodb::aql::QueryResult executeQuery(
break;
}
}
return result;
}
@ -534,7 +533,7 @@ void assertFilterOptimized(
irs::Or actualFilter;
arangodb::iresearch::QueryContext const ctx{ &trx, &plan, plan.getAst(), exprCtx, &viewNode->outVariable() };
CHECK(arangodb::iresearch::FilterFactory::filter(&actualFilter, ctx, viewNode->filterCondition()));
CHECK(arangodb::iresearch::FilterFactory::filter(&actualFilter, ctx, viewNode->filterCondition()).ok());
CHECK(!actualFilter.empty());
CHECK(expectedFilter == *actualFilter.begin());
}
@ -601,7 +600,7 @@ void assertExpressionFilter(
arangodb::transaction::Options()
);
arangodb::iresearch::QueryContext const ctx{ &trx, nullptr, nullptr, nullptr, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// iteratorForCondition
@ -625,7 +624,7 @@ void assertExpressionFilter(
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, &ExpressionContextMock::EMPTY, ref };
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((expected == actual));
CHECK(boost == actual.begin()->boost());
}
@ -735,7 +734,7 @@ void assertFilter(
);
arangodb::iresearch::QueryContext const ctx{ &trx, nullptr, nullptr, nullptr, ref };
CHECK((parseOk == arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode)));
CHECK((parseOk == arangodb::iresearch::FilterFactory::filter(nullptr, ctx, *filterNode).ok()));
}
// execution time
@ -752,7 +751,7 @@ void assertFilter(
irs::Or actual;
arangodb::iresearch::QueryContext const ctx{ &trx, dummyPlan.get(), ast, exprCtx, ref };
CHECK((execOk == arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode)));
CHECK((execOk == arangodb::iresearch::FilterFactory::filter(&actual, ctx, *filterNode).ok()));
CHECK((!execOk || (expected == actual)));
if (execOk) {