Add child relation deletion by parent query: Introduced a new SQL query to delete child relations where the character is either a father or mother. Updated relevant workers to execute this query before deleting child relations, ensuring proper cleanup of relationships during character deletion.
This commit is contained in:
@@ -20,6 +20,7 @@ use crate::worker::sql::{
|
|||||||
QUERY_DELETE_DIRECTOR,
|
QUERY_DELETE_DIRECTOR,
|
||||||
QUERY_DELETE_RELATIONSHIP,
|
QUERY_DELETE_RELATIONSHIP,
|
||||||
QUERY_DELETE_CHILD_RELATION,
|
QUERY_DELETE_CHILD_RELATION,
|
||||||
|
QUERY_DELETE_CHILD_RELATION_BY_PARENT,
|
||||||
QUERY_INSERT_NOTIFICATION,
|
QUERY_INSERT_NOTIFICATION,
|
||||||
QUERY_MARK_CHARACTER_DECEASED,
|
QUERY_MARK_CHARACTER_DECEASED,
|
||||||
};
|
};
|
||||||
@@ -426,7 +427,9 @@ impl CharacterCreationWorker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3) Child-Relations löschen und Eltern benachrichtigen
|
// 3) Child-Relations löschen (als Elter zuerst, dann als Kind) und Eltern benachrichtigen
|
||||||
|
conn.prepare("delete_child_relation_by_parent", QUERY_DELETE_CHILD_RELATION_BY_PARENT)?;
|
||||||
|
conn.execute("delete_child_relation_by_parent", &[&character_id])?;
|
||||||
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
||||||
let child_result = conn.execute("delete_child_relation", &[&character_id])?;
|
let child_result = conn.execute("delete_child_relation", &[&character_id])?;
|
||||||
for row in child_result {
|
for row in child_result {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ use crate::worker::sql::{
|
|||||||
QUERY_DELETE_RELATIONSHIP,
|
QUERY_DELETE_RELATIONSHIP,
|
||||||
QUERY_GET_USER_ID,
|
QUERY_GET_USER_ID,
|
||||||
QUERY_DELETE_CHILD_RELATION,
|
QUERY_DELETE_CHILD_RELATION,
|
||||||
|
QUERY_DELETE_CHILD_RELATION_BY_PARENT,
|
||||||
QUERY_DELETE_CHARACTER,
|
QUERY_DELETE_CHARACTER,
|
||||||
QUERY_GET_HEIR,
|
QUERY_GET_HEIR,
|
||||||
QUERY_SET_CHARACTER_USER,
|
QUERY_SET_CHARACTER_USER,
|
||||||
@@ -1460,8 +1461,10 @@ impl EventsWorker {
|
|||||||
Self::handle_inheritance(pool, broker, &mut conn, character_id, falukant_user_id)?;
|
Self::handle_inheritance(pool, broker, &mut conn, character_id, falukant_user_id)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4) Child-Relations löschen und Eltern benachrichtigen
|
// 4) Child-Relations löschen (als Elter zuerst, dann als Kind) und Eltern benachrichtigen
|
||||||
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
conn.prepare("delete_child_relation_by_parent", QUERY_DELETE_CHILD_RELATION_BY_PARENT)?;
|
||||||
|
conn.execute("delete_child_relation_by_parent", &[&character_id])?;
|
||||||
|
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
||||||
let child_result = conn.execute("delete_child_relation", &[&character_id])?;
|
let child_result = conn.execute("delete_child_relation", &[&character_id])?;
|
||||||
for row in child_result {
|
for row in child_result {
|
||||||
if let Some(father_user_id) = row
|
if let Some(father_user_id) = row
|
||||||
|
|||||||
@@ -544,6 +544,11 @@ WITH deleted AS (
|
|||||||
SELECT cf.user_id AS father_user_id, cm.user_id AS mother_user_id FROM deleted d JOIN falukant_data.character cf ON cf.id = d.father_character_id JOIN falukant_data.character cm ON cm.id = d.mother_character_id;
|
SELECT cf.user_id AS father_user_id, cm.user_id AS mother_user_id FROM deleted d JOIN falukant_data.character cf ON cf.id = d.father_character_id JOIN falukant_data.character cm ON cm.id = d.mother_character_id;
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
|
/// Entfernt alle child_relation-Zeilen, in denen der Charakter Vater oder Mutter ist (nötig vor Charakter-Löschung).
|
||||||
|
pub const QUERY_DELETE_CHILD_RELATION_BY_PARENT: &str = r#"
|
||||||
|
DELETE FROM falukant_data.child_relation WHERE father_character_id = $1 OR mother_character_id = $1;
|
||||||
|
"#;
|
||||||
|
|
||||||
pub const QUERY_DELETE_CHARACTER: &str = r#"
|
pub const QUERY_DELETE_CHARACTER: &str = r#"
|
||||||
DELETE FROM falukant_data.character WHERE id = $1;
|
DELETE FROM falukant_data.character WHERE id = $1;
|
||||||
"#;
|
"#;
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ use crate::worker::sql::{
|
|||||||
QUERY_DELETE_DIRECTOR,
|
QUERY_DELETE_DIRECTOR,
|
||||||
QUERY_DELETE_RELATIONSHIP,
|
QUERY_DELETE_RELATIONSHIP,
|
||||||
QUERY_DELETE_CHILD_RELATION,
|
QUERY_DELETE_CHILD_RELATION,
|
||||||
|
QUERY_DELETE_CHILD_RELATION_BY_PARENT,
|
||||||
QUERY_DELETE_KNOWLEDGE,
|
QUERY_DELETE_KNOWLEDGE,
|
||||||
QUERY_DELETE_DEBTORS_PRISM,
|
QUERY_DELETE_DEBTORS_PRISM,
|
||||||
QUERY_DELETE_POLITICAL_OFFICE,
|
QUERY_DELETE_POLITICAL_OFFICE,
|
||||||
@@ -576,6 +577,7 @@ impl UserCharacterWorker {
|
|||||||
conn.prepare("delete_director", QUERY_DELETE_DIRECTOR)?;
|
conn.prepare("delete_director", QUERY_DELETE_DIRECTOR)?;
|
||||||
conn.prepare("delete_relationship", QUERY_DELETE_RELATIONSHIP)?;
|
conn.prepare("delete_relationship", QUERY_DELETE_RELATIONSHIP)?;
|
||||||
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
||||||
|
conn.prepare("delete_child_relation_by_parent", QUERY_DELETE_CHILD_RELATION_BY_PARENT)?;
|
||||||
conn.prepare("delete_knowledge", QUERY_DELETE_KNOWLEDGE)?;
|
conn.prepare("delete_knowledge", QUERY_DELETE_KNOWLEDGE)?;
|
||||||
conn.prepare("delete_debtors_prism", QUERY_DELETE_DEBTORS_PRISM)?;
|
conn.prepare("delete_debtors_prism", QUERY_DELETE_DEBTORS_PRISM)?;
|
||||||
conn.prepare("delete_political_office", QUERY_DELETE_POLITICAL_OFFICE)?;
|
conn.prepare("delete_political_office", QUERY_DELETE_POLITICAL_OFFICE)?;
|
||||||
@@ -583,6 +585,7 @@ impl UserCharacterWorker {
|
|||||||
|
|
||||||
conn.execute("delete_director", &[&character_id])?;
|
conn.execute("delete_director", &[&character_id])?;
|
||||||
conn.execute("delete_relationship", &[&character_id])?;
|
conn.execute("delete_relationship", &[&character_id])?;
|
||||||
|
conn.execute("delete_child_relation_by_parent", &[&character_id])?;
|
||||||
conn.execute("delete_child_relation", &[&character_id])?;
|
conn.execute("delete_child_relation", &[&character_id])?;
|
||||||
conn.execute("delete_knowledge", &[&character_id])?;
|
conn.execute("delete_knowledge", &[&character_id])?;
|
||||||
conn.execute("delete_debtors_prism", &[&character_id])?;
|
conn.execute("delete_debtors_prism", &[&character_id])?;
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ use crate::worker::sql::{
|
|||||||
QUERY_DELETE_DIRECTOR,
|
QUERY_DELETE_DIRECTOR,
|
||||||
QUERY_DELETE_RELATIONSHIP,
|
QUERY_DELETE_RELATIONSHIP,
|
||||||
QUERY_DELETE_CHILD_RELATION,
|
QUERY_DELETE_CHILD_RELATION,
|
||||||
|
QUERY_DELETE_CHILD_RELATION_BY_PARENT,
|
||||||
QUERY_INSERT_NOTIFICATION,
|
QUERY_INSERT_NOTIFICATION,
|
||||||
QUERY_MARK_CHARACTER_DECEASED,
|
QUERY_MARK_CHARACTER_DECEASED,
|
||||||
};
|
};
|
||||||
@@ -426,7 +427,9 @@ impl CharacterCreationWorker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3) Child-Relations löschen und Eltern benachrichtigen
|
// 3) Child-Relations löschen (als Elter zuerst, dann als Kind) und Eltern benachrichtigen
|
||||||
|
conn.prepare("delete_child_relation_by_parent", QUERY_DELETE_CHILD_RELATION_BY_PARENT)?;
|
||||||
|
conn.execute("delete_child_relation_by_parent", &[&character_id])?;
|
||||||
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
||||||
let child_result = conn.execute("delete_child_relation", &[&character_id])?;
|
let child_result = conn.execute("delete_child_relation", &[&character_id])?;
|
||||||
for row in child_result {
|
for row in child_result {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ use crate::worker::sql::{
|
|||||||
QUERY_DELETE_RELATIONSHIP,
|
QUERY_DELETE_RELATIONSHIP,
|
||||||
QUERY_GET_USER_ID,
|
QUERY_GET_USER_ID,
|
||||||
QUERY_DELETE_CHILD_RELATION,
|
QUERY_DELETE_CHILD_RELATION,
|
||||||
|
QUERY_DELETE_CHILD_RELATION_BY_PARENT,
|
||||||
QUERY_DELETE_CHARACTER,
|
QUERY_DELETE_CHARACTER,
|
||||||
QUERY_GET_HEIR,
|
QUERY_GET_HEIR,
|
||||||
QUERY_SET_CHARACTER_USER,
|
QUERY_SET_CHARACTER_USER,
|
||||||
@@ -1486,8 +1487,10 @@ impl EventsWorker {
|
|||||||
Self::handle_inheritance(pool, broker, &mut conn, character_id, falukant_user_id)?;
|
Self::handle_inheritance(pool, broker, &mut conn, character_id, falukant_user_id)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4) Child-Relations löschen und Eltern benachrichtigen
|
// 4) Child-Relations löschen (als Elter zuerst, dann als Kind) und Eltern benachrichtigen
|
||||||
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
conn.prepare("delete_child_relation_by_parent", QUERY_DELETE_CHILD_RELATION_BY_PARENT)?;
|
||||||
|
conn.execute("delete_child_relation_by_parent", &[&character_id])?;
|
||||||
|
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
||||||
let child_result = conn.execute("delete_child_relation", &[&character_id])?;
|
let child_result = conn.execute("delete_child_relation", &[&character_id])?;
|
||||||
for row in child_result {
|
for row in child_result {
|
||||||
if let Some(father_user_id) = row
|
if let Some(father_user_id) = row
|
||||||
|
|||||||
@@ -544,6 +544,11 @@ WITH deleted AS (
|
|||||||
SELECT cf.user_id AS father_user_id, cm.user_id AS mother_user_id FROM deleted d JOIN falukant_data.character cf ON cf.id = d.father_character_id JOIN falukant_data.character cm ON cm.id = d.mother_character_id;
|
SELECT cf.user_id AS father_user_id, cm.user_id AS mother_user_id FROM deleted d JOIN falukant_data.character cf ON cf.id = d.father_character_id JOIN falukant_data.character cm ON cm.id = d.mother_character_id;
|
||||||
"#;
|
"#;
|
||||||
|
|
||||||
|
/// Entfernt alle child_relation-Zeilen, in denen der Charakter Vater oder Mutter ist (nötig vor Charakter-Löschung).
|
||||||
|
pub const QUERY_DELETE_CHILD_RELATION_BY_PARENT: &str = r#"
|
||||||
|
DELETE FROM falukant_data.child_relation WHERE father_character_id = $1 OR mother_character_id = $1;
|
||||||
|
"#;
|
||||||
|
|
||||||
pub const QUERY_DELETE_CHARACTER: &str = r#"
|
pub const QUERY_DELETE_CHARACTER: &str = r#"
|
||||||
DELETE FROM falukant_data.character WHERE id = $1;
|
DELETE FROM falukant_data.character WHERE id = $1;
|
||||||
"#;
|
"#;
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ use crate::worker::sql::{
|
|||||||
QUERY_DELETE_DIRECTOR,
|
QUERY_DELETE_DIRECTOR,
|
||||||
QUERY_DELETE_RELATIONSHIP,
|
QUERY_DELETE_RELATIONSHIP,
|
||||||
QUERY_DELETE_CHILD_RELATION,
|
QUERY_DELETE_CHILD_RELATION,
|
||||||
|
QUERY_DELETE_CHILD_RELATION_BY_PARENT,
|
||||||
QUERY_DELETE_KNOWLEDGE,
|
QUERY_DELETE_KNOWLEDGE,
|
||||||
QUERY_DELETE_DEBTORS_PRISM,
|
QUERY_DELETE_DEBTORS_PRISM,
|
||||||
QUERY_DELETE_POLITICAL_OFFICE,
|
QUERY_DELETE_POLITICAL_OFFICE,
|
||||||
@@ -625,6 +626,7 @@ impl UserCharacterWorker {
|
|||||||
conn.prepare("delete_director", QUERY_DELETE_DIRECTOR)?;
|
conn.prepare("delete_director", QUERY_DELETE_DIRECTOR)?;
|
||||||
conn.prepare("delete_relationship", QUERY_DELETE_RELATIONSHIP)?;
|
conn.prepare("delete_relationship", QUERY_DELETE_RELATIONSHIP)?;
|
||||||
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
conn.prepare("delete_child_relation", QUERY_DELETE_CHILD_RELATION)?;
|
||||||
|
conn.prepare("delete_child_relation_by_parent", QUERY_DELETE_CHILD_RELATION_BY_PARENT)?;
|
||||||
conn.prepare("delete_knowledge", QUERY_DELETE_KNOWLEDGE)?;
|
conn.prepare("delete_knowledge", QUERY_DELETE_KNOWLEDGE)?;
|
||||||
conn.prepare("delete_debtors_prism", QUERY_DELETE_DEBTORS_PRISM)?;
|
conn.prepare("delete_debtors_prism", QUERY_DELETE_DEBTORS_PRISM)?;
|
||||||
conn.prepare("delete_political_office", QUERY_DELETE_POLITICAL_OFFICE)?;
|
conn.prepare("delete_political_office", QUERY_DELETE_POLITICAL_OFFICE)?;
|
||||||
@@ -632,6 +634,7 @@ impl UserCharacterWorker {
|
|||||||
|
|
||||||
conn.execute("delete_director", &[&character_id])?;
|
conn.execute("delete_director", &[&character_id])?;
|
||||||
conn.execute("delete_relationship", &[&character_id])?;
|
conn.execute("delete_relationship", &[&character_id])?;
|
||||||
|
conn.execute("delete_child_relation_by_parent", &[&character_id])?;
|
||||||
conn.execute("delete_child_relation", &[&character_id])?;
|
conn.execute("delete_child_relation", &[&character_id])?;
|
||||||
conn.execute("delete_knowledge", &[&character_id])?;
|
conn.execute("delete_knowledge", &[&character_id])?;
|
||||||
conn.execute("delete_debtors_prism", &[&character_id])?;
|
conn.execute("delete_debtors_prism", &[&character_id])?;
|
||||||
|
|||||||
Reference in New Issue
Block a user