#![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;
#[cfg(all(feature = "ssl", all(unix, not(target_os = "macos"))))]
extern crate openssl;
#[cfg(all(feature = "ssl", target_os = "macos"))]
extern crate security_framework;
extern crate regex;
#[cfg(unix)]
extern crate libc;
#[cfg(unix)]
extern crate nix;
extern crate net2;
extern crate byteorder;
extern crate mysql_common as myc;
#[cfg(windows)]
extern crate named_pipe;
extern crate url;
extern crate bufstream;
extern crate fnv;
extern crate twox_hash;
extern crate smallvec;
#[cfg(target_os = "windows")]
extern crate winapi;
#[cfg(target_os = "windows")]
extern crate ws2_32;
#[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)*);
};
($($tail:tt)*) => {
{
let mut output = vec![];
params!(@expand output; $($tail)*);
output
}
};
}
mod scramble;
pub mod error;
mod packet;
mod io;
mod conn;
#[doc(inline)]
pub use myc::constants as consts;
#[doc(inline)]
pub use conn::Conn;
#[doc(inline)]
pub use conn::LocalInfile;
#[doc(inline)]
pub use conn::LocalInfileHandler;
#[doc(inline)]
pub use conn::IsolationLevel;
#[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 conn::pool::Pool;
#[doc(inline)]
pub use conn::pool::PooledConn;
#[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::row::Row;
#[doc(inline)]
pub use myc::row::convert::{
FromRowError,
from_row,
from_row_opt
};
#[doc(inline)]
pub use myc::params::Params;
#[doc(inline)]
pub use myc::value::Value;
#[doc(inline)]
pub use myc::value::convert::{
FromValueError,
from_value,
from_value_opt,
};
#[doc(inline)]
pub use myc::value::json::Serialized;
#[doc(inline)]
pub use myc::value::json::Deserialized;
pub mod prelude {
#[doc(inline)]
pub use myc::value::convert::{
ConvIr,
FromValue,
ToValue,
};
#[doc(inline)]
pub use myc::row::convert::{
FromRow,
};
#[doc(inline)]
pub use conn::GenericConnection;
}
#[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, }
);
}