mirror of
https://github.com/launchbadge/sqlx.git
synced 2026-04-06 02:13:48 +00:00
[MySQL] Add an integration tests for chrono + MySQL and fix issues
This commit is contained in:
81
tests/mysql-types-chrono.rs
Normal file
81
tests/mysql-types-chrono.rs
Normal file
@@ -0,0 +1,81 @@
|
||||
use sqlx::types::chrono::{DateTime, NaiveDate, NaiveTime, Utc};
|
||||
use sqlx::{mysql::MySqlConnection, Connection, Row};
|
||||
|
||||
async fn connect() -> anyhow::Result<MySqlConnection> {
|
||||
Ok(MySqlConnection::open(dotenv::var("DATABASE_URL")?).await?)
|
||||
}
|
||||
|
||||
#[async_std::test]
|
||||
async fn mysql_chrono_date() -> anyhow::Result<()> {
|
||||
let mut conn = connect().await?;
|
||||
|
||||
let value = NaiveDate::from_ymd(2019, 1, 2);
|
||||
|
||||
let row = sqlx::query("SELECT DATE '2019-01-02' = ?, ?")
|
||||
.bind(&value)
|
||||
.bind(&value)
|
||||
.fetch_one(&mut conn)
|
||||
.await?;
|
||||
|
||||
assert!(row.get::<bool, _>(0));
|
||||
assert_eq!(value, row.get(1));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[async_std::test]
|
||||
async fn mysql_chrono_date_time() -> anyhow::Result<()> {
|
||||
let mut conn = connect().await?;
|
||||
|
||||
let value = NaiveDate::from_ymd(2019, 1, 2).and_hms(5, 10, 20);
|
||||
|
||||
let row = sqlx::query("SELECT '2019-01-02 05:10:20' = ?, ?")
|
||||
.bind(&value)
|
||||
.bind(&value)
|
||||
.fetch_one(&mut conn)
|
||||
.await?;
|
||||
|
||||
assert!(row.get::<bool, _>(0));
|
||||
assert_eq!(value, row.get(1));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[async_std::test]
|
||||
async fn mysql_chrono_time() -> anyhow::Result<()> {
|
||||
let mut conn = connect().await?;
|
||||
|
||||
let value = NaiveTime::from_hms_micro(5, 10, 20, 115100);
|
||||
|
||||
let row = sqlx::query("SELECT TIME '05:10:20.115100' = ?, TIME '05:10:20.115100'")
|
||||
.bind(&value)
|
||||
.fetch_one(&mut conn)
|
||||
.await?;
|
||||
|
||||
assert!(row.get::<bool, _>(0));
|
||||
assert_eq!(value, row.get(1));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[async_std::test]
|
||||
async fn mysql_chrono_timestamp() -> anyhow::Result<()> {
|
||||
let mut conn = connect().await?;
|
||||
|
||||
let value = DateTime::<Utc>::from_utc(
|
||||
NaiveDate::from_ymd(2019, 1, 2).and_hms_micro(5, 10, 20, 115100),
|
||||
Utc,
|
||||
);
|
||||
|
||||
let row = sqlx::query(
|
||||
"SELECT TIMESTAMP '2019-01-02 05:10:20.115100' = ?, TIMESTAMP '2019-01-02 05:10:20.115100'",
|
||||
)
|
||||
.bind(&value)
|
||||
.fetch_one(&mut conn)
|
||||
.await?;
|
||||
|
||||
assert!(row.get::<bool, _>(0));
|
||||
assert_eq!(value, row.get(1));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1,13 +1,14 @@
|
||||
use sqlx::{mysql::MySqlConnection, Connection as _, Row};
|
||||
use sqlx::{mysql::MySqlConnection, Connection, Row};
|
||||
|
||||
async fn connect() -> anyhow::Result<MySqlConnection> {
|
||||
Ok(MySqlConnection::open(dotenv::var("DATABASE_URL")?).await?)
|
||||
}
|
||||
|
||||
macro_rules! test {
|
||||
($name:ident: $ty:ty: $($text:literal == $value:expr),+) => {
|
||||
#[async_std::test]
|
||||
async fn $name () -> sqlx::Result<()> {
|
||||
let mut conn =
|
||||
MySqlConnection::open(
|
||||
&dotenv::var("DATABASE_URL").expect("DATABASE_URL must be set")
|
||||
).await?;
|
||||
async fn $name () -> anyhow::Result<()> {
|
||||
let mut conn = connect().await?;
|
||||
|
||||
$(
|
||||
let row = sqlx::query(&format!("SELECT {} = ?, ? as _1", $text))
|
||||
@@ -29,12 +30,17 @@ macro_rules! test {
|
||||
}
|
||||
|
||||
test!(mysql_bool: bool: "false" == false, "true" == true);
|
||||
|
||||
test!(mysql_tiny_unsigned: u8: "253" == 253_u8);
|
||||
test!(mysql_tiny: i8: "5" == 5_i8);
|
||||
|
||||
test!(mysql_medium_unsigned: u16: "21415" == 21415_u16);
|
||||
test!(mysql_short: i16: "21415" == 21415_i16);
|
||||
|
||||
test!(mysql_long_unsigned: u32: "2141512" == 2141512_u32);
|
||||
test!(mysql_long: i32: "2141512" == 2141512_i32);
|
||||
|
||||
test!(mysql_longlong_unsigned: u64: "2141512" == 2141512_u64);
|
||||
test!(mysql_longlong: i64: "2141512" == 2141512_i64);
|
||||
|
||||
test!(mysql_string: String: "'helloworld'" == "helloworld");
|
||||
|
||||
Reference in New Issue
Block a user