From d47124656f7c7d5f949cca6f0adbfa9c1a4ba702 Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Mon, 16 Feb 2026 08:28:59 -0500 Subject: [PATCH] Moved delete into action module. --- src/action.rs | 2 ++ src/action/delete.rs | 65 +++++++++++++++++++++++++++++++++++++++++ src/action/message.rs | 7 +++-- src/document/create.rs | 29 +++++++++--------- src/document/session.rs | 8 ++--- src/message/wrapper.rs | 16 ---------- 6 files changed, 90 insertions(+), 37 deletions(-) create mode 100644 src/action/delete.rs diff --git a/src/action.rs b/src/action.rs index 089fb45..098b3f6 100644 --- a/src/action.rs +++ b/src/action.rs @@ -1,6 +1,7 @@ mod action_type; mod addition; mod calculation; +mod delete; mod message; mod query; mod reply; @@ -12,6 +13,7 @@ pub use crate::document::{DocDef, Field, FieldType, Records}; pub use action_type::Action; pub use addition::Addition; pub use calculation::{CalcValue, Calculation, Operand}; +pub use delete::Delete; pub use message::MsgAction; pub use query::Query; pub use reply::Reply; diff --git a/src/action/delete.rs b/src/action/delete.rs new file mode 100644 index 0000000..297d9c5 --- /dev/null +++ b/src/action/delete.rs @@ -0,0 +1,65 @@ +use crate::{ + name::NameType, + message::MessageAction, +}; +use super::Query; + +#[derive(Clone, Debug)] +pub struct Delete { + doc_name: NameType, + query: Query, +} + +impl Delete { + pub fn new(name: NT) -> Self where NT: Into { + Self { + doc_name: name.into(), + query: Query::internal(), + } + } + + pub fn get_query(&self) -> &Query { + &self.query + } + + pub fn get_query_mut(&mut self) -> &mut Query { + &mut self.query + } +} + +impl MessageAction for Delete { + fn doc_name(&self) -> &NameType { + &self.doc_name + } +} + +#[cfg(test)] +mod deletes { + use crate::{ + action::{Calculation, Operand}, + name::test_support::random_name + }; + use super::*; + + #[test] + fn can_create_delete_request() { + let name = random_name(); + let expected: NameType = name.clone().into(); + let delete = Delete::new(name); + assert_eq!(delete.doc_name(), &expected); + assert_eq!(delete.get_query().iter().count(), 0); + } + + #[test] + fn can_delete_query_be_added_to() { + let name = random_name(); + let expected: NameType = name.clone().into(); + let mut delete = Delete::new(name); + let query = delete.get_query_mut(); + let mut calc = Calculation::new(Operand::Equal); + calc.add_value("something").unwrap(); + query.add(random_name(), calc); + assert_eq!(delete.doc_name(), &expected); + assert_eq!(delete.get_query().iter().count(), 1); + } +} diff --git a/src/action/message.rs b/src/action/message.rs index 7a1fc76..617f147 100644 --- a/src/action/message.rs +++ b/src/action/message.rs @@ -1,7 +1,7 @@ -use super::{Addition, DocDef, Query, Records, Reply, Show, UserAction}; +use super::{Addition, Delete, DocDef, Query, Records, Reply, Show, UserAction}; use crate::{ message::{ - wrapper::{Delete, Update}, + wrapper::Update, MessageAction, }, mtterror::MTTError, @@ -13,6 +13,7 @@ use crate::{ pub enum MsgAction { Addition(Addition), Create(DocDef), + Delete(Delete), Error(MTTError), OnAddition(Records), OnDelete(Records), @@ -23,7 +24,6 @@ pub enum MsgAction { Register(Register), Reply(Reply), Show(Show), - Delete(Delete), Update(Update), } @@ -32,6 +32,7 @@ impl MessageAction for MsgAction { match self { Self::Addition(data) => data.doc_name(), Self::Create(data) => data.doc_name(), + Self::Delete(data) => data.doc_name(), Self::Error(data) => data.doc_name(), Self::OnAddition(data) => data.doc_name(), Self::OnDelete(data) => data.doc_name(), diff --git a/src/document/create.rs b/src/document/create.rs index a3dc4aa..be9e5a7 100644 --- a/src/document/create.rs +++ b/src/document/create.rs @@ -845,9 +845,8 @@ impl DocumentFile { mod document_files { use super::*; use crate::{ - action::{Addition, FieldType, Operand, Show}, + action::{Addition, Delete, FieldType, Operand, Show}, document::Clock, - message::wrapper::Delete, name::{Name, Names}, support_tests::TIMEOUT, }; @@ -1003,7 +1002,7 @@ mod document_files { let queue = test_doc.get_queue(); let msg_actions = [ MsgAction::Addition(Addition::new(name.clone())), - MsgAction::Delete(Delete::new(Query::internal())), + MsgAction::Delete(Delete::new(name.clone())), MsgAction::Query(Query::new(name.clone())), MsgAction::Show(Show::new(name.clone())), MsgAction::Update(Update::new(Query::internal())), @@ -1055,7 +1054,7 @@ mod document_files { let msg_actions = [ MsgAction::Addition(Addition::new(alt.clone())), MsgAction::Create(DocDef::new(name.clone())), - MsgAction::Delete(Delete::new(Query::new(alt.clone()))), + MsgAction::Delete(Delete::new(name.clone())), MsgAction::Query(Query::internal().into()), MsgAction::Show(Show::new(name.clone())), MsgAction::Update(Update::new(Query::internal())), @@ -1179,7 +1178,7 @@ mod document_files { for item in data.iter() { test_doc.populate([item.clone()].to_vec()); } - let msg = Message::new(doc_name.clone(), Delete::new(Query::internal())); + let msg = Message::new(doc_name.clone(), Delete::new(doc_name.clone())); queue.send(msg.clone()); let result = test_doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); assert_eq!( @@ -2267,9 +2266,9 @@ mod document_files { calc.add_value(1).unwrap(); calc.add_value(CalcValue::Existing(FieldType::Integer)) .unwrap(); - let mut query = Query::new(doc.doc_name()); - query.add(&fname, calc); - let delete = Delete::new(query.clone()); + let mut delete = Delete::new(doc.doc_name()); + let query = delete.get_query_mut(); + query.add(&fname, calc.clone()); doc.send(delete); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let action = result.get_action(); @@ -2285,7 +2284,9 @@ mod document_files { } _ => unreachable!("got {:?}: should have gotten reply", action), } - doc.send(query); + let mut result_query = Query::new(doc.doc_name()); + result_query.add(&fname, calc.clone()); + doc.send(result_query); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let action = result.get_action(); match action { @@ -2303,9 +2304,9 @@ mod document_files { calc.add_value(CalcValue::Existing(FieldType::Integer)) .unwrap(); calc.add_value(1).unwrap(); - let mut query = Query::internal(); + let mut delete = Delete::new(doc.doc_name()); + let query = delete.get_query_mut(); query.add(field_name.clone(), calc); - let delete = Delete::new(query); doc.send(delete); let result = doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let action = result.get_action(); @@ -2328,7 +2329,7 @@ mod document_files { .unwrap(); doc.start(standard_paths()); doc.populate([value.into()].to_vec()); - doc.send(Delete::new(Query::internal())); + doc.send(Delete::new(doc.doc_name())); doc.get_receiver().recv_timeout(TIMEOUT).unwrap(); let mut addition = Addition::new(doc.doc_name()); addition.add_field(&fname, value.clone()); @@ -2406,9 +2407,9 @@ mod document_files { calc.add_value(CalcValue::Existing(FieldType::Integer)) .unwrap(); calc.add_value(1).unwrap(); - let mut query = Query::internal(); + let mut delete = Delete::new(doc_name.clone()); + let query = delete.get_query_mut(); query.add(Name::english("field0"), calc); - let delete = Delete::new(query.clone()); let path = Path::new( Include::All, Include::Just(Name::english("clock").into()), diff --git a/src/document/session.rs b/src/document/session.rs index 2f77db5..0edb615 100644 --- a/src/document/session.rs +++ b/src/document/session.rs @@ -1,11 +1,11 @@ use crate::{ - action::{Action, CalcValue, Calculation, FieldType, Operand, Query}, + action::{Action, CalcValue, Calculation, Delete, FieldType, Operand, Query}, document::{ clock::Clock, create::IndexType, definition::{DocDef, DocFuncType}, }, - message::wrapper::{Delete, Message, Update}, + message::wrapper::{Message, Update}, name::{Name, NameType}, queue::{ data_director::{Include, Path, RegMsg, Register}, @@ -52,14 +52,14 @@ impl Session { let query_action = DocFuncType::ExistingQuery(update.into()); docdef.add_route(path, query_action); - let mut delete_qry = Query::internal(); + let mut delete = Delete::new(Session::doc_names()[0].clone()); + let delete_qry = delete.get_query_mut(); let mut delete_calc = Calculation::new(Operand::LessThan); delete_calc.add_value(FieldType::DateTime).unwrap(); delete_calc .add_value(CalcValue::Existing(FieldType::DateTime)) .unwrap(); delete_qry.add(name_expire.clone(), delete_calc); - let delete = Delete::new(delete_qry); let delete_func = DocFuncType::Trigger(delete.into()); docdef.add_route(Clock::get_path(), delete_func); diff --git a/src/message/wrapper.rs b/src/message/wrapper.rs index 98a3a7a..4239671 100644 --- a/src/message/wrapper.rs +++ b/src/message/wrapper.rs @@ -348,22 +348,6 @@ mod documents { } } -#[derive(Clone, Debug)] -pub struct Delete { - query: Query, -} - -impl Delete { - pub fn new(query: Query) -> Self { - Self { - query: query.into(), - } - } - - pub fn get_query(&self) -> &Query { - &self.query - } -} #[derive(Clone, Debug)] pub struct Update {