use crate::types::Asset; use clickhouse::Client; use serde::Serialize; pub async fn select(clickhouse_client: &Client) -> Vec { clickhouse_client .query("SELECT ?fields FROM assets FINAL") .fetch_all::() .await .unwrap() } pub async fn select_where_symbol(clickhouse_client: &Client, symbol: &T) -> Option where T: AsRef + Serialize + Send + Sync, { clickhouse_client .query("SELECT ?fields FROM assets FINAL WHERE symbol = ? OR abbreviation = ?") .bind(symbol) .bind(symbol) .fetch_optional::() .await .unwrap() } pub async fn upsert_batch(clickhouse_client: &Client, assets: T) where T: IntoIterator + 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(clickhouse_client: &Client, symbols: &[T]) where T: AsRef + Serialize + Send + Sync, { clickhouse_client .query("DELETE FROM assets WHERE symbol IN ?") .bind(symbols) .execute() .await .unwrap(); }