use std::sync::Arc; use crate::{optimize, types::News, upsert, upsert_batch}; use clickhouse::{error::Error, Client}; use serde::Serialize; use tokio::sync::Semaphore; upsert!(News, "news"); upsert_batch!(News, "news"); optimize!("news"); pub async fn delete_where_symbols( client: &Client, concurrency_limiter: &Arc, symbols: &[T], ) -> Result<(), Error> where T: AsRef + Serialize + Send + Sync, { let _ = concurrency_limiter.acquire().await.unwrap(); client .query("DELETE FROM news WHERE hasAny(symbols, ?) AND NOT hasAny(symbols, (SELECT groupArray(symbol) FROM assets))") .bind(symbols) .execute() .await } pub async fn cleanup(client: &Client, concurrency_limiter: &Arc) -> Result<(), Error> { let _ = concurrency_limiter.acquire().await.unwrap(); client .query( "DELETE FROM news WHERE NOT hasAny(symbols, (SELECT groupArray(symbol) FROM assets))", ) .execute() .await }