use conn::Conn;
use conn::stmt::futures::*;
use byteorder::ReadBytesExt;
use byteorder::LittleEndian as LE;
use errors::*;
use proto::Column;
use value::FromRow;
use value::Params;
pub mod futures;
#[derive(Eq, PartialEq, Clone, Debug)]
pub struct InnerStmt {
pub named_params: Option<Vec<String>>,
pub params: Option<Vec<Column>>,
pub columns: Option<Vec<Column>>,
pub statement_id: u32,
pub num_columns: u16,
pub num_params: u16,
pub warning_count: u16,
}
impl InnerStmt {
pub fn new(pld: &[u8], named_params: Option<Vec<String>>) -> Result<InnerStmt> {
let mut reader = &pld[1..];
let statement_id = reader.read_u32::<LE>()?;
let num_columns = reader.read_u16::<LE>()?;
let num_params = reader.read_u16::<LE>()?;
let warning_count = reader.read_u16::<LE>()?;
Ok(InnerStmt {
named_params: named_params,
statement_id: statement_id,
num_columns: num_columns,
num_params: num_params,
warning_count: warning_count,
params: None,
columns: None,
})
}
}
#[derive(Debug)]
pub struct Stmt {
stmt: InnerStmt,
conn: Conn,
}
pub fn new_stmt(stmt: InnerStmt, conn: Conn) -> Stmt {
Stmt {
stmt: stmt,
conn: conn,
}
}
impl Stmt {
pub fn execute<T: Into<Params>>(self, params: T) -> Execute {
new_execute(self, params.into())
}
pub fn batch<T: Into<Params>>(self, params_vec: Vec<T>) -> Batch {
new_batch(self, params_vec)
}
pub fn first<T: Into<Params>, R: FromRow>(self, params: T) -> First<R> {
new_first::<R>(self, params.into())
}
pub fn unwrap(self) -> Conn {
self.conn
}
#[doc(hidden)]
pub fn num_params(&self) -> u16 {
self.stmt.num_params
}
#[doc(hidden)]
pub fn num_columns(&self) -> u16 {
self.stmt.num_columns
}
#[doc(hidden)]
pub fn id(&self) -> u32 {
self.stmt.statement_id
}
#[doc(hidden)]
pub fn params(&self) -> Option<&[Column]> {
self.stmt.params.as_ref().map(|x| &**x)
}
#[doc(hidden)]
pub fn named_params(&self) -> Option<&[String]> {
self.stmt.named_params.as_ref().map(|x| &**x)
}
}