use anyhow::Result;
use arrow::record_batch::RecordBatch;
use tokio::sync::mpsc::Receiver;
pub type TableId = u64;
pub type ColumnId = u64;
pub type RecordId = u64;
pub type RequestId = usize;
#[derive(Clone)]
pub struct StorageRequest {
request_id: RequestId,
data_request: DataRequest,
}
impl StorageRequest {
pub fn new(request_id: RequestId, data_request: DataRequest) -> Self {
Self {
request_id,
data_request,
}
}
pub fn request_id(&self) -> RequestId {
self.request_id
}
pub fn data_request(&self) -> &DataRequest {
&self.data_request
}
}
#[derive(Clone)]
pub enum DataRequest {
Table(TableId),
Columns(TableId, Vec<ColumnId>),
Tuple(Vec<RecordId>),
}
#[async_trait::async_trait]
pub trait StorageClient: Send + Sync + 'static {
async fn request_data(&mut self, request: StorageRequest) -> Result<Receiver<RecordBatch>>;
async fn request_data_sync(&mut self, request: StorageRequest) -> Result<Vec<RecordBatch>>;
}