- Refactor everything in the process, oops Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
49 lines
1.2 KiB
Rust
49 lines
1.2 KiB
Rust
use crate::types::Asset;
|
|
use clickhouse::Client;
|
|
use serde::Serialize;
|
|
|
|
pub async fn select(clickhouse_client: &Client) -> Vec<Asset> {
|
|
clickhouse_client
|
|
.query("SELECT ?fields FROM assets FINAL")
|
|
.fetch_all::<Asset>()
|
|
.await
|
|
.unwrap()
|
|
}
|
|
|
|
pub async fn select_where_symbol<T>(clickhouse_client: &Client, symbol: &T) -> Option<Asset>
|
|
where
|
|
T: AsRef<str> + Serialize + Send + Sync,
|
|
{
|
|
clickhouse_client
|
|
.query("SELECT ?fields FROM assets FINAL WHERE symbol = ? OR abbreviation = ?")
|
|
.bind(symbol)
|
|
.bind(symbol)
|
|
.fetch_optional::<Asset>()
|
|
.await
|
|
.unwrap()
|
|
}
|
|
|
|
pub async fn upsert_batch<T>(clickhouse_client: &Client, assets: T)
|
|
where
|
|
T: IntoIterator<Item = Asset> + Send + Sync,
|
|
T::IntoIter: Send,
|
|
{
|
|
let mut insert = clickhouse_client.insert("assets").unwrap();
|
|
for asset in assets {
|
|
insert.write(&asset).await.unwrap();
|
|
}
|
|
insert.end().await.unwrap();
|
|
}
|
|
|
|
pub async fn delete_where_symbols<T>(clickhouse_client: &Client, symbols: &[T])
|
|
where
|
|
T: AsRef<str> + Serialize + Send + Sync,
|
|
{
|
|
clickhouse_client
|
|
.query("DELETE FROM assets WHERE symbol IN ?")
|
|
.bind(symbols)
|
|
.execute()
|
|
.await
|
|
.unwrap();
|
|
}
|