Skip to content

Commit f489b24

Browse files
committed
few additional adaptations
1 parent 0992fab commit f489b24

File tree

8 files changed

+49
-44
lines changed

8 files changed

+49
-44
lines changed

src/engine/Filter.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,11 @@ string Filter::getDescriptor() const {
4848
void Filter::setPrefilterExpressionForIndexScanChildren() {
4949
const std::vector<PrefilterVariablePair>& prefilterVec =
5050
_expression.getPrefilterExpressionForMetadata();
51-
this->forAllDescendants(
52-
[&prefilterVec](const QueryExecutionTree* ptr) -> void {
53-
if (ptr) {
54-
ptr->setPrefilterExpression(prefilterVec);
55-
}
56-
});
51+
this->forAllDescendants([&prefilterVec](const QueryExecutionTree* ptr) {
52+
if (ptr) {
53+
ptr->setPrefilterExpression(prefilterVec);
54+
}
55+
});
5756
}
5857

5958
// _____________________________________________________________________________

src/engine/IndexScan.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ VariableToColumnMap IndexScan::computeVariableToColumnMap() const {
157157

158158
//______________________________________________________________________________
159159
std::vector<CompressedBlockMetadata> IndexScan::applyFilterBlockMetadata(
160-
const std::vector<CompressedBlockMetadata>& blocks) const {
160+
std::vector<CompressedBlockMetadata>&& blocks) const {
161161
std::ranges::for_each(prefilters_, [&blocks](const PrefilterIndexPair& pair) {
162162
pair.first->evaluate(blocks, pair.second);
163163
});
@@ -276,7 +276,7 @@ ScanSpecificationAsTripleComponent IndexScan::getScanSpecificationTc() const {
276276

277277
// _____________________________________________________________________________
278278
Permutation::IdTableGenerator IndexScan::getLazyScan(
279-
std::vector<CompressedBlockMetadata> blocks) const {
279+
std::vector<CompressedBlockMetadata>&& blocks) const {
280280
// If there is a LIMIT or OFFSET clause that constrains the scan
281281
// (which can happen with an explicit subquery), we cannot use the prefiltered
282282
// blocks, as we currently have no mechanism to include limits and offsets
@@ -344,7 +344,8 @@ IndexScan::lazyScanForJoinOfTwoScans(const IndexScan& s1, const IndexScan& s2) {
344344
auto [blocks1, blocks2] = CompressedRelationReader::getBlocksForJoin(
345345
metaBlocks1.value(), metaBlocks2.value());
346346

347-
std::array result{s1.getLazyScan(blocks1), s2.getLazyScan(blocks2)};
347+
std::array result{s1.getLazyScan(std::move(blocks1)),
348+
s2.getLazyScan(std::move(blocks2))};
348349
result[0].details().numBlocksAll_ = metaBlocks1.value().blockMetadata_.size();
349350
result[1].details().numBlocksAll_ = metaBlocks2.value().blockMetadata_.size();
350351
return result;
@@ -365,7 +366,7 @@ Permutation::IdTableGenerator IndexScan::lazyScanForJoinOfColumnWithScan(
365366
auto blocks = CompressedRelationReader::getBlocksForJoin(joinColumn,
366367
metaBlocks1.value());
367368

368-
auto result = getLazyScan(blocks);
369+
auto result = getLazyScan(std::move(blocks));
369370
result.details().numBlocksAll_ = metaBlocks1.value().blockMetadata_.size();
370371
return result;
371372
}

src/engine/IndexScan.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class IndexScan final : public Operation {
147147
// Filter relevant `CompressedBlockMetadata` blocks by applying the
148148
// `PrefilterExpression`s from `prefilters_`.
149149
std::vector<CompressedBlockMetadata> applyFilterBlockMetadata(
150-
const std::vector<CompressedBlockMetadata>& blocks) const;
150+
std::vector<CompressedBlockMetadata>&& blocks) const;
151151

152152
// Return the (lazy) `IdTable` for this `IndexScan` in chunks.
153153
Result::Generator chunkedIndexScan() const;
@@ -157,6 +157,6 @@ class IndexScan final : public Operation {
157157
// Helper functions for the public `getLazyScanFor...` methods and
158158
// `chunkedIndexScan` (see above).
159159
Permutation::IdTableGenerator getLazyScan(
160-
std::vector<CompressedBlockMetadata> blocks) const;
160+
std::vector<CompressedBlockMetadata>&& blocks) const;
161161
std::optional<Permutation::MetadataAndBlocks> getMetadataForScan() const;
162162
};

src/engine/Operation.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,15 @@ class Operation {
7979

8080
// Set `PrefilterExpression`s (for `IndexScan`).
8181
virtual void setPrefilterExpression(
82-
const std::vector<PrefilterVariablePair>&){};
82+
const std::vector<PrefilterVariablePair>&){
83+
// The prefiltering procedure is implemented by applying the
84+
// PrefilterExpressions directly on the CompressedBlockMetadata.
85+
// This is currently done while performing the result computation for
86+
// IndexScan.
87+
// (1) Overwrite this method for the derived IndexScan class.
88+
// (2) The default method for all other derived classes is implemented
89+
// here, no PrefilterExpressions need to be set.
90+
};
8391

8492
// Apply the provided void function for all descendants. The given function
8593
// must be invocable with a `const QueryExecutionTree*` object.

src/engine/sparqlExpressions/RelationalExpressions.cpp

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -448,22 +448,21 @@ RelationalExpression<comp>::getPrefilterExpressionForMetadata(
448448
};
449449

450450
const auto tryGetPrefilterExprVariablePairVec =
451-
[&mirroredExpression](
452-
const SparqlExpression* child0, const SparqlExpression* child1,
453-
bool reversed) -> std::vector<PrefilterExprVariablePair> {
454-
std::vector<PrefilterExprVariablePair> resVec{};
455-
if (const auto* variable =
456-
dynamic_cast<const VariableExpression*>(child0)) {
457-
if (const auto* valueId = dynamic_cast<const IdExpression*>(child1)) {
458-
resVec.emplace_back(std::make_pair(
459-
reversed ? mirroredExpression(valueId->value())
460-
: std::make_unique<p::RelationalExpression<comp>>(
461-
valueId->value()),
462-
variable->value()));
463-
}
464-
}
465-
return resVec;
466-
};
451+
[&mirroredExpression](const SparqlExpression* child0,
452+
const SparqlExpression* child1, bool reversed) {
453+
std::vector<PrefilterExprVariablePair> resVec{};
454+
if (const auto* variable =
455+
dynamic_cast<const VariableExpression*>(child0)) {
456+
if (const auto* valueId = dynamic_cast<const IdExpression*>(child1)) {
457+
resVec.emplace_back(
458+
reversed ? mirroredExpression(valueId->value())
459+
: std::make_unique<p::RelationalExpression<comp>>(
460+
valueId->value()),
461+
variable->value());
462+
}
463+
}
464+
return resVec;
465+
};
467466
// Option 1:
468467
// RelationalExpression containing a VariableExpression as the first child
469468
// and an IdExpression as the second child.

src/engine/sparqlExpressions/StringExpressions.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -244,23 +244,23 @@ class StrStartsExpressionImpl : public NaryExpression<NaryOperation> {
244244
AD_CORRECTNESS_CHECK(this->N == 2);
245245
const SparqlExpression* child0 = this->getNthChild(0).value();
246246
const SparqlExpression* child1 = this->getNthChild(1).value();
247-
const auto getPrefilterExprVariableVec =
248-
[](const SparqlExpression* child0, const SparqlExpression* child1,
249-
bool startsWithVar) -> std::vector<PrefilterExprVariablePair> {
247+
const auto getPrefilterExprVariableVec = [](const SparqlExpression* child0,
248+
const SparqlExpression* child1,
249+
bool startsWithVar) {
250250
using namespace prefilterExpressions;
251251
std::vector<PrefilterExprVariablePair> resVec{};
252252
if (const auto* variable =
253253
dynamic_cast<const VariableExpression*>(child0)) {
254254
if (const auto* valueId = dynamic_cast<const IdExpression*>(child1)) {
255255
!startsWithVar
256-
// make {<(>= VocabId(n)), ?var>} (Option 1)
257-
? resVec.emplace_back(std::make_pair(
256+
// Will return: {<(>= VocabId(n)), ?var>} (Option 1)
257+
? resVec.emplace_back(
258258
std::make_unique<GreaterEqualExpression>(valueId->value()),
259-
variable->value()))
260-
// make {<(<= VocabId(n)), ?var>} (Option 2)
261-
: resVec.emplace_back(std::make_pair(
259+
variable->value())
260+
// Will return: {<(<= VocabId(n)), ?var>} (Option 2)
261+
: resVec.emplace_back(
262262
std::make_unique<LessEqualExpression>(valueId->value()),
263-
variable->value()));
263+
variable->value());
264264
}
265265
}
266266
return resVec;

src/index/CompressedBlockPrefiltering.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ std::vector<BlockMetadata> RelationalExpression<Comparison>::evaluateImpl(
269269
template <CompOp Comparison>
270270
bool RelationalExpression<Comparison>::operator==(
271271
const PrefilterExpression& other) const {
272-
const RelationalExpression<Comparison>* otherRelational =
272+
const auto* otherRelational =
273273
dynamic_cast<const RelationalExpression<Comparison>*>(&other);
274274
if (!otherRelational) {
275275
return false;
@@ -333,7 +333,7 @@ std::vector<BlockMetadata> LogicalExpression<Operation>::evaluateImpl(
333333
template <LogicalOperator Operation>
334334
bool LogicalExpression<Operation>::operator==(
335335
const PrefilterExpression& other) const {
336-
const LogicalExpression<Operation>* otherlogical =
336+
const auto* otherlogical =
337337
dynamic_cast<const LogicalExpression<Operation>*>(&other);
338338
if (!otherlogical) {
339339
return false;
@@ -382,8 +382,7 @@ std::vector<BlockMetadata> NotExpression::evaluateImpl(
382382

383383
//______________________________________________________________________________
384384
bool NotExpression::operator==(const PrefilterExpression& other) const {
385-
const NotExpression* otherNotExpression =
386-
dynamic_cast<const NotExpression*>(&other);
385+
const auto* otherNotExpression = dynamic_cast<const NotExpression*>(&other);
387386
if (!otherNotExpression) {
388387
return false;
389388
}

src/index/Permutation.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,7 @@ IdTable Permutation::scan(
6666
const auto& p = getActualPermutation(scanSpec);
6767

6868
return p.reader().scan(
69-
scanSpec,
70-
blocks.has_value() ? std::move(blocks.value()) : p.meta_.blockData(),
69+
scanSpec, blocks.has_value() ? blocks.value() : p.meta_.blockData(),
7170
additionalColumns, cancellationHandle,
7271
getLocatedTriplesForPermutation(locatedTriplesSnapshot), limitOffset);
7372
}

0 commit comments

Comments
 (0)