#![crate_name = "mysql"]
#![crate_type = "rlib"]
#![crate_type = "dylib"]
#![cfg_attr(feature = "nightly", feature(test, const_fn, drop_types_in_const))]
#[cfg(feature = "nightly")]
extern crate test;
extern crate bit_vec;
extern crate bufstream;
extern crate byteorder;
extern crate flate2;
extern crate fnv;
#[cfg(unix)]
extern crate libc;
extern crate mysql_common as myc;
#[cfg(windows)]
extern crate named_pipe;
extern crate net2;
#[cfg(unix)]
extern crate nix;
#[cfg(all(feature = "ssl", all(unix, not(target_os = "macos"))))]
extern crate openssl;
extern crate regex;
#[cfg(all(feature = "ssl", target_os = "macos"))]
extern crate security_framework;
extern crate smallvec;
extern crate twox_hash;
extern crate url;
#[cfg(target_os = "windows")]
extern crate winapi;
#[cfg(feature = "rustc_serialize")]
pub extern crate rustc_serialize;
#[cfg(not(feature = "rustc_serialize"))]
pub extern crate serde;
#[cfg(not(feature = "rustc_serialize"))]
pub extern crate serde_json;
#[cfg(all(test, not(feature = "rustc_serialize")))]
#[macro_use]
extern crate serde_derive;
pub use myc::chrono;
pub use myc::time;
pub use myc::uuid;
#[macro_export]
macro_rules! params {
() => {};
(@to_pair $name:expr => $value:expr) => (
(::std::string::String::from($name), $crate::Value::from($value))
);
(@to_pair $name:ident) => (
(::std::string::String::from(stringify!($name)), $crate::Value::from($name))
);
(@expand $vec:expr;) => {};
(@expand $vec:expr; $name:expr => $value:expr, $($tail:tt)*) => {
$vec.push(params!(@to_pair $name => $value));
params!(@expand $vec; $($tail)*);
};
(@expand $vec:expr; $name:expr => $value:expr $(, $tail:tt)*) => {
$vec.push(params!(@to_pair $name => $value));
params!(@expand $vec; $($tail)*);
};
(@expand $vec:expr; $name:ident, $($tail:tt)*) => {
$vec.push(params!(@to_pair $name));
params!(@expand $vec; $($tail)*);
};
(@expand $vec:expr; $name:ident $(, $tail:tt)*) => {
$vec.push(params!(@to_pair $name));
params!(@expand $vec; $($tail)*);
};
($i:ident, $($tail:tt)*) => {
{
let mut output = ::std::vec::Vec::new();
params!(@expand output; $i, $($tail)*);
output
}
};
($i:expr => $($tail:tt)*) => {
{
let mut output = ::std::vec::Vec::new();
params!(@expand output; $i => $($tail)*);
output
}
};
($i:ident) => {
{
let mut output = ::std::vec::Vec::new();
params!(@expand output; $i);
output
}
}
}
mod conn;
pub mod error;
mod io;
mod packet;
#[doc(inline)]
pub use myc::constants as consts;
#[doc(inline)]
pub use conn::pool::Pool;
#[doc(inline)]
pub use conn::pool::PooledConn;
#[doc(inline)]
pub use conn::Conn;
#[doc(inline)]
pub use conn::IsolationLevel;
#[doc(inline)]
pub use conn::LocalInfile;
#[doc(inline)]
pub use conn::LocalInfileHandler;
#[doc(inline)]
pub use conn::Opts;
#[doc(inline)]
pub use conn::OptsBuilder;
#[doc(inline)]
pub use conn::QueryResult;
#[doc(inline)]
pub use conn::Stmt;
#[doc(inline)]
pub use conn::Transaction;
#[doc(inline)]
pub use error::DriverError;
#[doc(inline)]
pub use error::Error;
#[doc(inline)]
pub use error::MySqlError;
#[doc(inline)]
pub use error::Result;
#[doc(inline)]
pub use error::ServerError;
#[doc(inline)]
pub use error::UrlError;
#[doc(inline)]
pub use myc::packets::Column;
#[doc(inline)]
pub use myc::params::Params;
#[doc(inline)]
pub use myc::row::convert::{from_row, from_row_opt, FromRowError};
#[doc(inline)]
pub use myc::row::Row;
#[doc(inline)]
pub use myc::value::convert::{from_value, from_value_opt, FromValueError};
#[doc(inline)]
pub use myc::value::json::Deserialized;
#[doc(inline)]
pub use myc::value::json::Serialized;
#[doc(inline)]
pub use myc::value::Value;
pub mod prelude {
#[doc(inline)]
pub use conn::GenericConnection;
#[doc(inline)]
pub use myc::row::convert::FromRow;
#[doc(inline)]
pub use myc::value::convert::{ConvIr, FromValue, ToValue};
}
#[cfg(test)]
#[test]
fn params_macro_test() {
let foo = 42;
let bar = "bar";
assert_eq!(vec![(String::from("foo"), Value::Int(42))], params! { foo });
assert_eq!(
vec![(String::from("foo"), Value::Int(42))],
params! { foo, }
);
assert_eq!(
vec![
(String::from("foo"), Value::Int(42)),
(String::from("bar"), Value::Bytes((&b"bar"[..]).into())),
],
params! { foo, bar }
);
assert_eq!(
vec![
(String::from("foo"), Value::Int(42)),
(String::from("bar"), Value::Bytes((&b"bar"[..]).into())),
],
params! { foo, bar, }
);
assert_eq!(
vec![
(String::from("foo"), Value::Int(42)),
(String::from("bar"), Value::Bytes((&b"bar"[..]).into())),
],
params! { "foo" => foo, "bar" => bar }
);
assert_eq!(
vec![
(String::from("foo"), Value::Int(42)),
(String::from("bar"), Value::Bytes((&b"bar"[..]).into())),
],
params! { "foo" => foo, "bar" => bar, }
);
assert_eq!(
vec![
(String::from("foo"), Value::Int(42)),
(String::from("bar"), Value::Bytes((&b"bar"[..]).into())),
],
params! { foo, "bar" => bar }
);
assert_eq!(
vec![
(String::from("foo"), Value::Int(42)),
(String::from("bar"), Value::Bytes((&b"bar"[..]).into())),
],
params! { "foo" => foo, bar }
);
assert_eq!(
vec![
(String::from("foo"), Value::Int(42)),
(String::from("bar"), Value::Bytes((&b"bar"[..]).into())),
],
params! { foo, "bar" => bar, }
);
assert_eq!(
vec![
(String::from("foo"), Value::Int(42)),
(String::from("bar"), Value::Bytes((&b"bar"[..]).into())),
],
params! { "foo" => foo, bar, }
);
}