Skip to content

Commit c0c1295

Browse files
authored
Make sure delete existing nodes during dropping. (#334)
1 parent 694d79d commit c0c1295

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

src/ops/storages/neo4j.rs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -961,19 +961,22 @@ impl SetupStatusCheck {
961961
desired_state: Option<&RelationshipSetupState>,
962962
existing: &CombinedState<RelationshipSetupState>,
963963
) -> Self {
964-
let data_clear = existing
965-
.current
966-
.as_ref()
967-
.filter(|existing_current| {
968-
desired_state.as_ref().is_none_or(|desired| {
969-
desired.check_compatible(existing_current)
970-
== SetupStateCompatibility::NotCompatible
971-
})
972-
})
973-
.map(|existing_current| DataClearAction {
974-
core_elem_type: key.typ.clone(),
975-
dependent_node_labels: existing_current.dependent_node_labels.clone(),
976-
});
964+
let mut core_elem_type_to_clear = None;
965+
let mut dependent_node_labels_to_clear = IndexSet::new();
966+
for v in existing.possible_versions() {
967+
if desired_state.as_ref().is_none_or(|desired| {
968+
desired.check_compatible(v) == SetupStateCompatibility::NotCompatible
969+
}) {
970+
if core_elem_type_to_clear.is_none() {
971+
core_elem_type_to_clear = Some(key.typ.clone());
972+
}
973+
dependent_node_labels_to_clear.extend(v.dependent_node_labels.iter().cloned());
974+
}
975+
}
976+
let data_clear = core_elem_type_to_clear.map(|core_elem_type| DataClearAction {
977+
core_elem_type,
978+
dependent_node_labels: dependent_node_labels_to_clear.into_iter().collect(),
979+
});
977980

978981
let change_type = match (desired_state, existing.possible_versions().next()) {
979982
(Some(_), Some(_)) => {
@@ -1027,7 +1030,7 @@ impl ResourceSetupStatusCheck for SetupStatusCheck {
10271030
async fn apply_change(&self) -> Result<()> {
10281031
let graph = self.graph_pool.get_graph(&self.conn_spec).await?;
10291032
if let Some(data_clear) = &self.data_clear {
1030-
let delete_rel_query = neo4rs::query(&formatdoc! {"
1033+
let delete_query = neo4rs::query(&formatdoc! {"
10311034
CALL {{
10321035
MATCH {matcher}
10331036
WITH {var_name}
@@ -1042,7 +1045,7 @@ impl ResourceSetupStatusCheck for SetupStatusCheck {
10421045
_ => "".to_string(),
10431046
},
10441047
});
1045-
graph.run(delete_rel_query).await?;
1048+
graph.run(delete_query).await?;
10461049

10471050
for node_label in &data_clear.dependent_node_labels {
10481051
let delete_node_query = neo4rs::query(&formatdoc! {"

0 commit comments

Comments
 (0)