Filtering

This commit is contained in:
niko4299 2022-07-18 15:28:52 +02:00
parent 19dff1ae5c
commit efa64fc864
2 changed files with 13 additions and 7 deletions

View File

@ -959,11 +959,12 @@ PullPlan::PullPlan(const std::shared_ptr<CachedPlan> plan, const Parameters &par
ctx_.evaluation_context.parameters = parameters;
ctx_.evaluation_context.properties = NamesToProperties(plan->ast_storage().properties_, dba);
ctx_.evaluation_context.labels = NamesToLabels(plan->ast_storage().labels_, dba);
#ifdef MG_ENTERPRISE
if (username.has_value()) {
memgraph::auth::User *user = interpreter_context->auth->GetUser(*username);
ctx_.label_checker = new LabelChecker{user, dba};
}
#endif
if (interpreter_context->config.execution_timeout_sec > 0) {
ctx_.timer = utils::AsyncTimer{interpreter_context->config.execution_timeout_sec};
}

View File

@ -394,8 +394,8 @@ class ScanAllCursor : public Cursor {
while (!vertices_ || vertices_it_.value() == vertices_.value().end()) {
if (!input_cursor_->Pull(frame, context)) return false;
// We need a getter function, because in case of exhausting a lazy
// iterable, we cannot simply reset it by calling begin().
// We need a getter function, because in case of exhausting a lazy iterable,
// we cannot simply reset it by calling begin().
auto next_vertices = get_vertices_(frame, context);
if (!next_vertices) continue;
// Since vertices iterator isn't nothrow_move_assignable, we have to use
@ -405,17 +405,22 @@ class ScanAllCursor : public Cursor {
vertices_it_.emplace(vertices_.value().begin());
}
#ifdef MG_ENTERPRISE
while (vertices_it_.value() != vertices_.value().end()) {
VertexAccessor vertex = *vertices_it_.value();
auto vertex_labels = vertex.Labels(memgraph::storage::View::NEW).GetValue();
if (!context.label_checker || context.label_checker->IsUserAuthorized(vertex_labels)) {
frame[output_symbol_] = *vertices_it_.value();
++vertices_it_.value();
return true;
break;
}
++vertices_it_.value();
}
return false;
if (vertices_it_.value() == vertices_.value().end()) return false;
#endif
frame[output_symbol_] = *vertices_it_.value();
++vertices_it_.value();
return true;
}
void Shutdown() override { input_cursor_->Shutdown(); }