mithril_aggregator/database/query/buffered_single_signature/
delete_buffered_single_signature.rsuse sqlite::Value;
use mithril_common::entities::{PartyId, SignedEntityTypeDiscriminants};
use mithril_persistence::sqlite::{Query, SourceAlias, SqLiteEntity, WhereCondition};
use crate::database::record::BufferedSingleSignatureRecord;
pub struct DeleteBufferedSingleSignatureQuery {
condition: WhereCondition,
}
impl DeleteBufferedSingleSignatureQuery {
pub fn by_discriminant_and_party_ids(
signed_entity_type_discriminant: SignedEntityTypeDiscriminants,
party_ids: Vec<PartyId>,
) -> Self {
let ids_values = party_ids.into_iter().map(Value::String).collect();
Self {
condition: WhereCondition::new(
"signed_entity_type_id = ?*",
vec![Value::Integer(
signed_entity_type_discriminant.index() as i64
)],
)
.and_where(WhereCondition::where_in("party_id", ids_values)),
}
}
}
impl Query for DeleteBufferedSingleSignatureQuery {
type Entity = BufferedSingleSignatureRecord;
fn filters(&self) -> WhereCondition {
self.condition.clone()
}
fn get_definition(&self, condition: &str) -> String {
let projection = Self::Entity::get_projection().expand(SourceAlias::new(&[(
"{:buffered_single_signature:}",
"buffered_single_signature",
)]));
format!("delete from buffered_single_signature where {condition} returning {projection}")
}
}
#[cfg(test)]
mod tests {
use mithril_common::entities::SignedEntityTypeDiscriminants::{
CardanoTransactions, MithrilStakeDistribution,
};
use mithril_persistence::sqlite::ConnectionExtensions;
use crate::database::query::GetBufferedSingleSignatureQuery;
use crate::database::record::strip_buffered_sigs_date;
use crate::database::test_helper::{insert_buffered_single_signatures, main_db_connection};
use super::*;
#[test]
fn test_delete_buffered_single_signature_records_by_discriminant_and_party_ids() {
let connection = main_db_connection().unwrap();
let records = BufferedSingleSignatureRecord::fakes(&[
("party_1", MithrilStakeDistribution),
("party_2", MithrilStakeDistribution),
("party_3", MithrilStakeDistribution),
("party_1", CardanoTransactions),
("party_2", CardanoTransactions),
]);
insert_buffered_single_signatures(&connection, records.clone()).unwrap();
let cursor = connection
.fetch(
DeleteBufferedSingleSignatureQuery::by_discriminant_and_party_ids(
MithrilStakeDistribution,
vec!["party_1".into(), "party_3".into()],
),
)
.unwrap();
assert_eq!(2, cursor.count());
let remaining_records: Vec<BufferedSingleSignatureRecord> = connection
.fetch_collect(GetBufferedSingleSignatureQuery::all())
.unwrap();
assert_eq!(
strip_buffered_sigs_date(&BufferedSingleSignatureRecord::fakes(&[
("party_2", CardanoTransactions),
("party_1", CardanoTransactions),
("party_2", MithrilStakeDistribution),
])),
strip_buffered_sigs_date(&remaining_records)
);
let cursor = connection
.fetch(
DeleteBufferedSingleSignatureQuery::by_discriminant_and_party_ids(
CardanoTransactions,
vec!["party_1".into(), "party_2".into()],
),
)
.unwrap();
assert_eq!(2, cursor.count());
let remaining_records: Vec<BufferedSingleSignatureRecord> = connection
.fetch_collect(GetBufferedSingleSignatureQuery::all())
.unwrap();
assert_eq!(
strip_buffered_sigs_date(&BufferedSingleSignatureRecord::fakes(&[(
"party_2",
MithrilStakeDistribution
),])),
strip_buffered_sigs_date(&remaining_records)
);
}
}