Fix inconsistencies in text index updating
This commit is contained in:
parent
e1e025f0ed
commit
00bdd8ac96
@ -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_);
|
||||||
|
if (flags::run_time::GetExperimentalTextSearchEnabled()) {
|
||||||
context.db_accessor->TextIndexUpdateVertex(&lhs.ValueVertex());
|
context.db_accessor->TextIndexUpdateVertex(&lhs.ValueVertex());
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case TypedValue::Type::Edge:
|
case TypedValue::Type::Edge:
|
||||||
#ifdef MG_ENTERPRISE
|
#ifdef MG_ENTERPRISE
|
||||||
|
@ -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;
|
||||||
|
@ -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()};
|
||||||
|
@ -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>{};
|
||||||
|
Loading…
Reference in New Issue
Block a user