From b2d7e4f23fb96eaf234a743350316b6cda112aeb Mon Sep 17 00:00:00 2001 From: Johannes Kalmbach Date: Mon, 15 Jan 2024 18:20:51 +0100 Subject: [PATCH] Next --- src/engine/HasPredicateScan.cpp | 7 ++++--- src/engine/IndexScan.h | 4 ++++ src/engine/Join.h | 7 +++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/engine/HasPredicateScan.cpp b/src/engine/HasPredicateScan.cpp index 839c7a03d9..2c6581c8e9 100644 --- a/src/engine/HasPredicateScan.cpp +++ b/src/engine/HasPredicateScan.cpp @@ -17,7 +17,7 @@ static constexpr auto makeJoin = [](auto* qec, auto subtree, subtree->getVariableAndInfoByColumnIndex(subtreeColIndex).first; auto hasPatternScan = ad_utility::makeExecutionTree( qec, Permutation::Enum::PSO, - SparqlTriple{subtreeVar, HAS_PATTERN_PREDICATE, Variable{"?pattern"}}); + SparqlTriple{subtreeVar, HAS_PATTERN_PREDICATE, Variable{"?patternInternal"}}); auto joinedSubtree = ad_utility::makeExecutionTree( qec, std::move(subtree), std::move(hasPatternScan), subtreeColIndex, 0); auto column = joinedSubtree->getVariableColumns().at(subtreeVar).columnIndex_; @@ -103,7 +103,7 @@ size_t HasPredicateScan::getResultWidth() const { case ScanType::FULL_SCAN: return 2; case ScanType::SUBQUERY_S: - return subtree().getResultWidth() + 1; + return subtree().getResultWidth(); } return -1; } @@ -144,7 +144,8 @@ VariableToColumnMap HasPredicateScan::computeVariableToColumnMap() const { break; case ScanType::SUBQUERY_S: varCols = subtree().getVariableColumns(); - varCols.insert(std::make_pair(V{_object}, col(getResultWidth() - 1))); + varCols.insert(std::make_pair(V{_object}, col(subtreeColIdx()))); + varCols.erase(Variable{"?patternInternal"}); break; } return varCols; diff --git a/src/engine/IndexScan.h b/src/engine/IndexScan.h index 7e822146f6..6e576eed38 100644 --- a/src/engine/IndexScan.h +++ b/src/engine/IndexScan.h @@ -46,6 +46,10 @@ class IndexScan : public Operation { vector resultSortedOn() const override; + size_t numVariables() const { + return numVariables_; + } + void setTextLimit(size_t) override { // Do nothing. } diff --git a/src/engine/Join.h b/src/engine/Join.h index c8a1cb61eb..a4b0cebe93 100644 --- a/src/engine/Join.h +++ b/src/engine/Join.h @@ -122,8 +122,11 @@ class Join : public Operation { ColumnIndex jc2, IdTable* dynRes); static bool isFullScanDummy(std::shared_ptr tree) { - return tree->getType() == QueryExecutionTree::SCAN && - tree->getResultWidth() == 3; + if (tree->getType() != QueryExecutionTree::SCAN) { + return false; + } + const auto& scan = dynamic_cast(*tree->getRootOperation()); + return scan.numVariables() == 3; } protected: