Skip to content

Commit

Permalink
Try to improve the performance of appendVertices (vesoft-inc#3857)
Browse files Browse the repository at this point in the history
* Try to improve the performance of appendVertices

* fix a unstable tck
  • Loading branch information
jievince authored and liwenhui-soul committed Feb 15, 2022
1 parent aace0f6 commit e85f6fc
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
32 changes: 20 additions & 12 deletions src/graph/executor/query/AppendVerticesExecutor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ Status AppendVerticesExecutor::handleResp(
auto *av = asNode<AppendVertices>(node());
auto *vFilter = av->vFilter();
QueryExpressionContext ctx(qctx()->ectx());

auto inputIter = qctx()->ectx()->getResult(av->inputVar()).iter();
DataSet ds;
ds.colNames = av->colNames();
ds.rows.reserve(inputIter->size());

for (auto &resp : rpcResp.responses()) {
if (resp.props_ref().has_value()) {
auto iter = PropIter(std::make_shared<Value>(std::move(*resp.props_ref())));
Expand All @@ -80,26 +86,28 @@ Status AppendVerticesExecutor::handleResp(
continue;
}
}
map.emplace(iter.getColumn(kVid), iter.getVertex());
if (!av->trackPrevPath()) { // eg. MATCH (v:Person) RETURN v
Row row;
row.values.emplace_back(iter.getVertex());
ds.rows.emplace_back(std::move(row));
} else {
map.emplace(iter.getColumn(kVid), iter.getVertex());
}
}
}
}

auto iter = qctx()->ectx()->getResult(av->inputVar()).iter();
auto *src = av->src();
if (!av->trackPrevPath()) {
return finish(ResultBuilder().value(Value(std::move(ds))).state(state).build());
}

DataSet ds;
ds.colNames = av->colNames();
ds.rows.reserve(iter->size());
for (; iter->valid(); iter->next()) {
auto dstFound = map.find(src->eval(ctx(iter.get())));
auto *src = av->src();
for (; inputIter->valid(); inputIter->next()) {
auto dstFound = map.find(src->eval(ctx(inputIter.get())));
if (dstFound == map.end()) {
continue;
}
Row row;
if (av->trackPrevPath()) {
row = *iter->row();
}
Row row = *inputIter->row();
row.values.emplace_back(dstFound->second);
ds.rows.emplace_back(std::move(row));
}
Expand Down
2 changes: 1 addition & 1 deletion tests/tck/features/match/Base.feature
Original file line number Diff line number Diff line change
Expand Up @@ -704,7 +704,7 @@ Feature: Basic match
When executing query:
"""
USE nba;
MATCH (n:player) RETURN n LIMIT 1;
MATCH (n:player) WHERE id(n) == "Boris Diaw" RETURN n;
"""
Then the result should be, in any order:
| n |
Expand Down

0 comments on commit e85f6fc

Please sign in to comment.