Crates.io | diesel-softdelete |
lib.rs | diesel-softdelete |
version | 0.1.0 |
source | src |
created_at | 2022-07-12 10:52:18.518597 |
updated_at | 2022-07-12 10:52:18.518597 |
description | Soft-delete support for the Diesel ORM |
homepage | |
repository | https://github.com/Tuetuopay/diesel-softdelete |
max_upload_size | |
id | 624313 |
size | 43,410 |
Add soft-delete integration to the Diesel query builder.
Soft deletion is a practice where a database entry is not actually deleted, but flagged as
deleted. This often takes the form of a deleted
boolean flag. However this implies always
filtering on this flag in your queries, which is both cumbersome and error prone: always
filtering on the flag is repetitive, can be forgotten and can lead to incorrect queries in e.g.
joins.
The main additions of this library are to the query builder, with new operations:
soft_find
which is analogous to
find
, but with the soft-delete filter applied.soft_inner_join
/
soft_left_join
which are analogous to
inner_join
/
left_join
,
but with the soft-delete filter applied to the ON
clause, not the WHERE
clause.Your model needs to have a deleted
boolean column. Then, use the soft_delete
macro to implement the SoftDelete
trait on the table. And that's it! The
soft_find
and other functions are ready to be used in place of the regular find
etc macros
once the prelude is imported.
use diesel_softdelete::prelude::*;
table! {
user (id) {
id -> Integer,
name -> Text,
deleted -> Bool,
}
}
soft_delete!(user);
conn.batch_execute("
create table user(
id integer primary key,
name text not null,
deleted bool not null default false
);
insert into user(id, name, deleted) values (1, 'Alice', false), (2, 'Bob', true);
")?;
let name = user::table.soft_find(1).select(user::name).first::<String>(&conn).optional()?;
assert_eq!(name, Some("Alice".to_owned()));
let name = user::table.soft_find(2).select(user::name).first::<String>(&conn).optional()?;
assert_eq!(name, None);
License: MIT OR Apache-2.0