Fix inconsistencies in text index updating

This commit is contained in:
Ante Pušić 2024-02-18 17:54:51 +01:00
parent e1e025f0ed
commit 00bdd8ac96
4 changed files with 37 additions and 27 deletions

View File

@ -3106,7 +3106,9 @@ bool SetProperties::SetPropertiesCursor::Pull(Frame &frame, ExecutionContext &co
} }
#endif #endif
SetPropertiesOnRecord(&lhs.ValueVertex(), rhs, self_.op_, &context, cached_name_id_); SetPropertiesOnRecord(&lhs.ValueVertex(), rhs, self_.op_, &context, cached_name_id_);
context.db_accessor->TextIndexUpdateVertex(&lhs.ValueVertex()); if (flags::run_time::GetExperimentalTextSearchEnabled()) {
context.db_accessor->TextIndexUpdateVertex(&lhs.ValueVertex());
}
break; break;
case TypedValue::Type::Edge: case TypedValue::Type::Edge:
#ifdef MG_ENTERPRISE #ifdef MG_ENTERPRISE

View File

@ -1841,11 +1841,13 @@ mgp_error mgp_vertex_set_property(struct mgp_vertex *v, const char *property_nam
std::visit([property_name](auto *impl) { return impl->NameToProperty(property_name); }, v->graph->impl); std::visit([property_name](auto *impl) { return impl->NameToProperty(property_name); }, v->graph->impl);
const auto result = std::visit( const auto result = std::visit(
[prop_key, property_value](auto &impl) { [prop_key, property_value](auto &impl) { return impl.SetProperty(prop_key, ToPropertyValue(*property_value)); },
// TODO antepusic also update text index
return impl.SetProperty(prop_key, ToPropertyValue(*property_value));
},
v->impl); v->impl);
if (memgraph::flags::run_time::GetExperimentalTextSearchEnabled() && !result.HasError()) {
auto v_impl = v->getImpl();
v->graph->getImpl()->TextIndexUpdateVertex(&v_impl);
}
if (result.HasError()) { if (result.HasError()) {
switch (result.GetError()) { switch (result.GetError()) {
case memgraph::storage::Error::DELETED_OBJECT: case memgraph::storage::Error::DELETED_OBJECT:
@ -1902,7 +1904,11 @@ mgp_error mgp_vertex_set_properties(struct mgp_vertex *v, struct mgp_map *proper
} }
const auto result = v->getImpl().UpdateProperties(props); const auto result = v->getImpl().UpdateProperties(props);
// TODO antepusic also update text index if (memgraph::flags::run_time::GetExperimentalTextSearchEnabled() && !result.HasError()) {
auto v_impl = v->getImpl();
v->graph->getImpl()->TextIndexUpdateVertex(&v_impl);
}
if (result.HasError()) { if (result.HasError()) {
switch (result.GetError()) { switch (result.GetError()) {
case memgraph::storage::Error::DELETED_OBJECT: case memgraph::storage::Error::DELETED_OBJECT:
@ -1959,12 +1965,11 @@ mgp_error mgp_vertex_add_label(struct mgp_vertex *v, mgp_label label) {
throw ImmutableObjectException{"Cannot add a label to an immutable vertex!"}; throw ImmutableObjectException{"Cannot add a label to an immutable vertex!"};
} }
const auto result = std::visit( const auto result = std::visit([label_id](auto &impl) { return impl.AddLabel(label_id); }, v->impl);
[label_id](auto &impl) { if (memgraph::flags::run_time::GetExperimentalTextSearchEnabled() && !result.HasError()) {
// TODO antepusic also update text index auto v_impl = v->getImpl();
return impl.AddLabel(label_id); v->graph->getImpl()->TextIndexUpdateVertex(&v_impl);
}, }
v->impl);
if (result.HasError()) { if (result.HasError()) {
switch (result.GetError()) { switch (result.GetError()) {
@ -2006,12 +2011,11 @@ mgp_error mgp_vertex_remove_label(struct mgp_vertex *v, mgp_label label) {
if (!MgpVertexIsMutable(*v)) { if (!MgpVertexIsMutable(*v)) {
throw ImmutableObjectException{"Cannot remove a label from an immutable vertex!"}; throw ImmutableObjectException{"Cannot remove a label from an immutable vertex!"};
} }
const auto result = std::visit( const auto result = std::visit([label_id](auto &impl) { return impl.RemoveLabel(label_id); }, v->impl);
[label_id](auto &impl) { if (memgraph::flags::run_time::GetExperimentalTextSearchEnabled() && !result.HasError()) {
// todo also remove from text index auto v_impl = v->getImpl();
return impl.RemoveLabel(label_id); v->graph->getImpl()->TextIndexUpdateVertex(&v_impl, {label_id});
}, }
v->impl);
if (result.HasError()) { if (result.HasError()) {
switch (result.GetError()) { switch (result.GetError()) {
@ -2981,6 +2985,11 @@ mgp_error mgp_graph_create_vertex(struct mgp_graph *graph, mgp_memory *memory, m
} }
auto *vertex = std::visit( auto *vertex = std::visit(
[=](auto *impl) { return NewRawMgpObject<mgp_vertex>(memory, impl->InsertVertex(), graph); }, graph->impl); [=](auto *impl) { return NewRawMgpObject<mgp_vertex>(memory, impl->InsertVertex(), graph); }, graph->impl);
// TODO antepusic update text index
if (memgraph::flags::run_time::GetExperimentalTextSearchEnabled()) {
auto v_impl = vertex->getImpl();
vertex->graph->getImpl()->TextIndexAddVertex(&v_impl);
}
auto &ctx = graph->ctx; auto &ctx = graph->ctx;
ctx->execution_stats[memgraph::query::ExecutionStats::Key::CREATED_NODES] += 1; ctx->execution_stats[memgraph::query::ExecutionStats::Key::CREATED_NODES] += 1;

View File

@ -1,4 +1,4 @@
// Copyright 2023 Memgraph Ltd. // Copyright 2024 Memgraph Ltd.
// //
// Use of this software is governed by the Business Source License // Use of this software is governed by the Business Source License
// included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source // included in the file licenses/BSL.txt; by using this file, you agree to be bound by the terms of the Business Source
@ -562,6 +562,13 @@ struct mgp_graph {
memgraph::query::ExecutionContext *ctx; memgraph::query::ExecutionContext *ctx;
memgraph::storage::StorageMode storage_mode; memgraph::storage::StorageMode storage_mode;
memgraph::query::DbAccessor *getImpl() const {
return std::visit(
memgraph::utils::Overloaded{[](memgraph::query::DbAccessor *impl) { return impl; },
[](memgraph::query::SubgraphDbAccessor *impl) { return impl->GetAccessor(); }},
this->impl);
}
static mgp_graph WritableGraph(memgraph::query::DbAccessor &acc, memgraph::storage::View view, static mgp_graph WritableGraph(memgraph::query::DbAccessor &acc, memgraph::storage::View view,
memgraph::query::ExecutionContext &ctx) { memgraph::query::ExecutionContext &ctx) {
return mgp_graph{&acc, view, &ctx, acc.GetStorageMode()}; return mgp_graph{&acc, view, &ctx, acc.GetStorageMode()};

View File

@ -149,10 +149,6 @@ Result<std::optional<VertexAccessor>> Storage::Accessor::DeleteVertex(VertexAcce
return res.GetError(); return res.GetError();
} }
if (flags::run_time::GetExperimentalTextSearchEnabled()) {
storage_->indices_.text_index_.RemoveNode(vertex->vertex_);
}
const auto &value = res.GetValue(); const auto &value = res.GetValue();
if (!value) { if (!value) {
return std::optional<VertexAccessor>{}; return std::optional<VertexAccessor>{};
@ -190,10 +186,6 @@ Result<std::optional<std::pair<VertexAccessor, std::vector<EdgeAccessor>>>> Stor
return res.GetError(); return res.GetError();
} }
if (flags::run_time::GetExperimentalTextSearchEnabled()) {
storage_->indices_.text_index_.RemoveNode(vertex->vertex_);
}
auto &value = res.GetValue(); auto &value = res.GetValue();
if (!value) { if (!value) {
return std::optional<ReturnType>{}; return std::optional<ReturnType>{};