use std::sync::Arc;
use glaredb_core::runtime::pipeline::QueryHandle;
use glaredb_core::runtime::profile_buffer::ProfileBuffer;
use parking_lot::Mutex;
use super::task::TaskState;
#[derive(Debug)]
pub struct ThreadedQueryHandle {
pub(crate) states: Mutex<Vec<Arc<TaskState>>>,
pub(crate) profiles: ProfileBuffer,
}
impl QueryHandle for ThreadedQueryHandle {
fn cancel(&self) {
let states = self.states.lock();
for state in states.iter() {
let mut sched_guard = state.sched_state.lock();
sched_guard.canceled = true;
std::mem::drop(sched_guard);
Arc::clone(state).schedule();
}
}
fn get_profile_buffer(&self) -> &ProfileBuffer {
&self.profiles
}
}