use odbc_sys::{HStmt, Handle, HandleType};
use crate::handles::{AnyHandle, SqlResult, Statement, StatementRef, drop_handle};
#[derive(Debug)]
pub struct StatementConnection<C> {
handle: HStmt,
_parent: C,
}
impl<C> StatementConnection<C>
where
C: StatementParent,
{
pub(crate) unsafe fn new(handle: HStmt, parent: C) -> Self {
Self {
_parent: parent,
handle,
}
}
pub fn as_stmt_ref(&mut self) -> StatementRef<'_> {
unsafe { StatementRef::new(self.handle) }
}
}
impl<C> Drop for StatementConnection<C> {
fn drop(&mut self) {
unsafe {
drop_handle(self.handle.as_handle(), HandleType::Stmt);
}
}
}
pub unsafe trait StatementParent {}
unsafe impl<C> Send for StatementConnection<C> where C: StatementParent {}
unsafe impl<C> AnyHandle for StatementConnection<C>
where
C: StatementParent,
{
fn as_handle(&self) -> Handle {
self.handle.as_handle()
}
fn handle_type(&self) -> HandleType {
HandleType::Stmt
}
}
impl<C> Statement for StatementConnection<C>
where
C: StatementParent,
{
fn as_sys(&self) -> HStmt {
self.handle
}
fn end_cursor_scope(&mut self) -> SqlResult<()> {
SqlResult::Success(())
}
}