#![crate_name = "mysql"]
#![crate_type = "rlib"]
#![crate_type = "dylib"]
#![cfg_attr(feature = "nightly", feature(test, const_fn))]
#[cfg(feature = "nightly")]
extern crate test;
use mysql_common as myc;
pub extern crate serde;
pub extern crate serde_json;
#[cfg(test)]
#[macro_use]
extern crate serde_derive;
pub use crate::myc::chrono;
pub use crate::myc::time;
pub use crate::myc::uuid;
mod conn;
pub mod error;
mod io;
#[doc(inline)]
pub use crate::myc::constants as consts;
#[doc(inline)]
pub use crate::conn::local_infile::{LocalInfile, LocalInfileHandler};
#[doc(inline)]
pub use crate::conn::opts::SslOpts;
#[doc(inline)]
pub use crate::conn::opts::{Opts, OptsBuilder};
#[doc(inline)]
pub use crate::conn::pool::{Pool, PooledConn};
#[doc(inline)]
pub use crate::conn::query_result::QueryResult;
#[doc(inline)]
pub use crate::conn::stmt::Stmt;
#[doc(inline)]
pub use crate::conn::transaction::{IsolationLevel, Transaction};
#[doc(inline)]
pub use crate::conn::Conn;
#[doc(inline)]
pub use crate::error::{DriverError, Error, MySqlError, Result, ServerError, UrlError};
#[doc(inline)]
pub use crate::myc::packets::Column;
#[doc(inline)]
pub use crate::myc::params::Params;
#[doc(inline)]
pub use crate::myc::proto::codec::Compression;
#[doc(inline)]
pub use crate::myc::row::convert::{from_row, from_row_opt, FromRowError};
#[doc(inline)]
pub use crate::myc::row::Row;
#[doc(inline)]
pub use crate::myc::value::convert::{from_value, from_value_opt, FromValueError};
#[doc(inline)]
pub use crate::myc::value::json::{Deserialized, Serialized};
#[doc(inline)]
pub use crate::myc::value::Value;
pub mod prelude {
#[doc(inline)]
pub use crate::conn::GenericConnection;
#[doc(inline)]
pub use crate::myc::row::convert::FromRow;
#[doc(inline)]
pub use crate::myc::value::convert::{ConvIr, FromValue, ToValue};
}
#[doc(inline)]
pub use crate::myc::params;
#[cfg(test)]
mod test_misc {
use lazy_static::lazy_static;
use std::env;
use crate::conn::opts::{Opts, OptsBuilder};
use crate::SslOpts;
#[allow(dead_code)]
fn error_should_implement_send_and_sync() {
fn _dummy<T: Send + Sync>(_: T) {}
_dummy(crate::error::Error::FromValueError(crate::Value::NULL));
}
lazy_static! {
pub static ref DATABASE_URL: String = {
if let Ok(url) = env::var("DATABASE_URL") {
let opts = Opts::from_url(&url).expect("DATABASE_URL invalid");
if opts
.get_db_name()
.expect("a database name is required")
.is_empty()
{
panic!("database name is empty");
}
url
} else {
"mysql://root:password@127.0.0.1:3307/mysql".into()
}
};
}
pub fn get_opts() -> OptsBuilder {
let mut builder = OptsBuilder::from_opts(&**DATABASE_URL);
builder.init(vec!["SET GLOBAL sql_mode = 'TRADITIONAL'"]);
if test_compression() {
builder.compress(Some(Default::default()));
}
if test_ssl() {
builder.prefer_socket(false);
let mut ssl_opts = SslOpts::default();
ssl_opts.set_danger_skip_domain_validation(true);
ssl_opts.set_danger_accept_invalid_certs(true);
builder.ssl_opts(ssl_opts);
}
builder
}
pub fn test_ssl() -> bool {
let ssl = env::var("SSL").ok().unwrap_or("false".into());
ssl == "true" || ssl == "1"
}
pub fn test_compression() -> bool {
let compress = env::var("COMPRESS").ok().unwrap_or("false".into());
compress == "true" || compress == "1"
}
}