use crate::{Result, types::Row};
use std::sync::Arc;
pub struct ResultIterator {
rows: Vec<Row>,
pos: usize,
}
impl ResultIterator {
pub fn new(rows: Vec<Row>) -> Self {
Self { rows, pos: 0 }
}
pub fn next(&mut self) -> Option<&Row> {
if self.pos < self.rows.len() {
let row = &self.rows[self.pos];
self.pos += 1;
Some(row)
} else {
None
}
}
pub fn len(&self) -> usize {
self.rows.len()
}
pub fn is_empty(&self) -> bool {
self.rows.is_empty()
}
}
pub struct ExecutionEngine {
batch_size: usize,
}
impl ExecutionEngine {
pub fn new() -> Result<Self> {
Ok(Self {
batch_size: 1000,
})
}
pub fn with_batch_size(batch_size: usize) -> Result<Self> {
Ok(Self { batch_size })
}
#[allow(unused_variables)]
pub fn execute_scan(&self, source: Arc<dyn Iterator<Item = Row>>) -> Result<ResultIterator> {
Ok(ResultIterator::new(Vec::new()))
}
pub fn batch_size(&self) -> usize {
self.batch_size
}
}
impl Default for ExecutionEngine {
fn default() -> Self {
Self::new().unwrap()
}
}