37 lines
1021 B
Rust
37 lines
1021 B
Rust
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<T>(
|
|
client: &Client,
|
|
concurrency_limiter: &Arc<Semaphore>,
|
|
symbols: &[T],
|
|
) -> Result<(), Error>
|
|
where
|
|
T: AsRef<str> + 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<Semaphore>) -> Result<(), Error> {
|
|
let _ = concurrency_limiter.acquire().await.unwrap();
|
|
client
|
|
.query(
|
|
"DELETE FROM news WHERE NOT hasAny(symbols, (SELECT groupArray(symbol) FROM assets))",
|
|
)
|
|
.execute()
|
|
.await
|
|
}
|