Add contains ticketbook data db query (#5670)
* Add contains ticketbook data db query * Fix clippy * Use exists for better performance
This commit is contained in:
committed by
GitHub
parent
af2c4f50b6
commit
16059211b9
@@ -172,6 +172,21 @@ impl MemoryEcachTicketbookManager {
|
||||
);
|
||||
}
|
||||
|
||||
pub(crate) async fn contains_ticketbook(&self, ticketbook: &IssuedTicketBook) -> bool {
|
||||
let ser = ticketbook.pack();
|
||||
let search_data = Zeroizing::new(ser.data);
|
||||
self.inner
|
||||
.read()
|
||||
.await
|
||||
.ticketbooks
|
||||
.iter()
|
||||
.any(|ticketbook| {
|
||||
let ser = ticketbook.1.ticketbook.pack();
|
||||
let data = Zeroizing::new(ser.data);
|
||||
search_data.eq(&data)
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) async fn get_ticketbooks_info(&self) -> Vec<BasicTicketbookInformation> {
|
||||
let guard = self.inner.read().await;
|
||||
|
||||
|
||||
@@ -95,6 +95,24 @@ impl SqliteEcashTicketbookManager {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) async fn contains_ticketbook_data(&self, data: &[u8]) -> Result<bool, sqlx::Error> {
|
||||
let exists = sqlx::query(
|
||||
r#"
|
||||
SELECT EXISTS (
|
||||
SELECT 1
|
||||
FROM ecash_ticketbook
|
||||
WHERE ticketbook_data = ?
|
||||
)
|
||||
"#,
|
||||
)
|
||||
.bind(data)
|
||||
.fetch_optional(&self.connection_pool)
|
||||
.await?
|
||||
.is_some();
|
||||
|
||||
Ok(exists)
|
||||
}
|
||||
|
||||
pub(crate) async fn get_ticketbooks_info(
|
||||
&self,
|
||||
) -> Result<Vec<BasicTicketbookInformation>, sqlx::Error> {
|
||||
|
||||
@@ -70,6 +70,13 @@ impl Storage for EphemeralStorage {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn contains_issued_ticketbook(
|
||||
&self,
|
||||
ticketbook: &IssuedTicketBook,
|
||||
) -> Result<bool, StorageError> {
|
||||
Ok(self.storage_manager.contains_ticketbook(ticketbook).await)
|
||||
}
|
||||
|
||||
async fn get_ticketbooks_info(
|
||||
&self,
|
||||
) -> Result<Vec<BasicTicketbookInformation>, Self::StorageError> {
|
||||
|
||||
@@ -145,6 +145,16 @@ impl Storage for PersistentStorage {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn contains_issued_ticketbook(
|
||||
&self,
|
||||
ticketbook: &IssuedTicketBook,
|
||||
) -> Result<bool, Self::StorageError> {
|
||||
let ser = ticketbook.pack();
|
||||
let data = Zeroizing::new(ser.data);
|
||||
|
||||
Ok(self.storage_manager.contains_ticketbook_data(&data).await?)
|
||||
}
|
||||
|
||||
async fn get_ticketbooks_info(
|
||||
&self,
|
||||
) -> Result<Vec<BasicTicketbookInformation>, Self::StorageError> {
|
||||
|
||||
@@ -37,6 +37,11 @@ pub trait Storage: Clone + Send + Sync {
|
||||
ticketbook: &IssuedTicketBook,
|
||||
) -> Result<(), Self::StorageError>;
|
||||
|
||||
async fn contains_issued_ticketbook(
|
||||
&self,
|
||||
ticketbook: &IssuedTicketBook,
|
||||
) -> Result<bool, Self::StorageError>;
|
||||
|
||||
async fn get_ticketbooks_info(
|
||||
&self,
|
||||
) -> Result<Vec<BasicTicketbookInformation>, Self::StorageError>;
|
||||
|
||||
Reference in New Issue
Block a user