use super::*;
use easy_macros::always_context;
use easy_sql_macros::query;
#[derive(Table, Debug, Clone)]
#[sql(no_version)]
pub struct CaseFunctionTestTable {
#[sql(primary_key)]
#[sql(auto_increment)]
pub id: i32,
pub name: String,
}
#[derive(Insert, Update, Output, Debug, Clone, PartialEq)]
#[sql(table = CaseFunctionTestTable)]
#[sql(default = id)]
pub struct CaseFunctionTestData {
pub name: String,
}
#[always_context(skip(!))]
#[tokio::test]
async fn test_upper_uppercase() -> anyhow::Result<()> {
let db = Database::setup_for_testing::<CaseFunctionTestTable>().await?;
let mut conn = db.transaction().await?;
let data = CaseFunctionTestData {
name: "hello".to_string(),
};
query!(&mut conn, INSERT INTO CaseFunctionTestTable VALUES {data}).await?;
let result: CaseFunctionTestData = query!(&mut conn,
SELECT CaseFunctionTestData FROM CaseFunctionTestTable
WHERE UPPER(name) = "HELLO"
)
.await?;
assert_eq!(result.name, "hello");
conn.rollback().await?;
Ok(())
}
#[always_context(skip(!))]
#[tokio::test]
async fn test_upper_lowercase() -> anyhow::Result<()> {
let db = Database::setup_for_testing::<CaseFunctionTestTable>().await?;
let mut conn = db.transaction().await?;
let data = CaseFunctionTestData {
name: "hello".to_string(),
};
query!(&mut conn, INSERT INTO CaseFunctionTestTable VALUES {data}).await?;
let result: CaseFunctionTestData = query!(&mut conn,
SELECT CaseFunctionTestData FROM CaseFunctionTestTable
WHERE upper(name) = "HELLO"
)
.await?;
assert_eq!(result.name, "hello");
conn.rollback().await?;
Ok(())
}
#[always_context(skip(!))]
#[tokio::test]
async fn test_upper_mixedcase() -> anyhow::Result<()> {
let db = Database::setup_for_testing::<CaseFunctionTestTable>().await?;
let mut conn = db.transaction().await?;
let data = CaseFunctionTestData {
name: "hello".to_string(),
};
query!(&mut conn, INSERT INTO CaseFunctionTestTable VALUES {data}).await?;
let result: CaseFunctionTestData = query!(&mut conn,
SELECT CaseFunctionTestData FROM CaseFunctionTestTable
WHERE Upper(name) = "HELLO"
)
.await?;
assert_eq!(result.name, "hello");
conn.rollback().await?;
Ok(())
}
#[always_context(skip(!))]
#[tokio::test]
async fn test_length_uppercase() -> anyhow::Result<()> {
let db = Database::setup_for_testing::<CaseFunctionTestTable>().await?;
let mut conn = db.transaction().await?;
let data = CaseFunctionTestData {
name: "hello".to_string(),
};
query!(&mut conn, INSERT INTO CaseFunctionTestTable VALUES {data}).await?;
let result: CaseFunctionTestData = query!(&mut conn,
SELECT CaseFunctionTestData FROM CaseFunctionTestTable
WHERE LENGTH(name) = 5
)
.await?;
assert_eq!(result.name, "hello");
conn.rollback().await?;
Ok(())
}
#[always_context(skip(!))]
#[tokio::test]
async fn test_length_lowercase() -> anyhow::Result<()> {
let db = Database::setup_for_testing::<CaseFunctionTestTable>().await?;
let mut conn = db.transaction().await?;
let data = CaseFunctionTestData {
name: "hello".to_string(),
};
query!(&mut conn, INSERT INTO CaseFunctionTestTable VALUES {data}).await?;
let result: CaseFunctionTestData = query!(&mut conn,
SELECT CaseFunctionTestData FROM CaseFunctionTestTable
WHERE length(name) = 5
)
.await?;
assert_eq!(result.name, "hello");
conn.rollback().await?;
Ok(())
}
#[always_context(skip(!))]
#[tokio::test]
async fn test_length_mixedcase() -> anyhow::Result<()> {
let db = Database::setup_for_testing::<CaseFunctionTestTable>().await?;
let mut conn = db.transaction().await?;
let data = CaseFunctionTestData {
name: "hello".to_string(),
};
query!(&mut conn, INSERT INTO CaseFunctionTestTable VALUES {data}).await?;
let result: CaseFunctionTestData = query!(&mut conn,
SELECT CaseFunctionTestData FROM CaseFunctionTestTable
WHERE LeNgTh(name) = 5
)
.await?;
assert_eq!(result.name, "hello");
conn.rollback().await?;
Ok(())
}