Deletes
There are two delete functions: delete_one
, and delete_many
.
Both functions take a predicate and delete all rows that match that predicate.
delete_one
takes a key. It will build a filter predicate from that and delete the row that coresponds to the key.
delete_many
builds a predicate from the filters of the Query
argument. Field filters and predicates and considered, whereas field selects and selections in the query are ignored. See the query language for details.
# #[tokio::main(flavor="current_thread")] # async fn main(){ use toql::prelude::{ToqlApi, Cache, Toql, query, Keyed}; use toql::mock_db::MockDb; #[derive(Toql)] #[toql(auto_key)] struct User{ #[toql(key)] id: u64, name: String, } let cache = Cache::new(); let mut toql = MockDb::from(&cache); toql.delete_one(UserKey::from(5)).await.unwrap(); assert_eq!(toql.take_unsafe_sql(), "DELETE user FROM User user WHERE user.id = 5"); let u = User {id: 5, name: "John".to_string()}; toql.delete_one(u.key()).await.unwrap(); assert_eq!(toql.take_unsafe_sql(), "DELETE user FROM User user WHERE user.id = 5"); toql.delete_many(query!(User, "id eq 5")).await.unwrap(); assert_eq!(toql.take_unsafe_sql(), "DELETE user FROM User user WHERE user.id = 5"); # }
Cascading
delete
does not do any cascading by itself. It just deletes rows from a single table.
To cascade your deletes you must configure your database relations
and tell the database what to do with your joined rows: Delete them too or just set the foreign key to NULL.
Check the manual for