use sz_orm_macros::FromQueryResult;
#[derive(FromQueryResult)]
#[allow(dead_code)]
struct User {
id: i64,
name: String,
}
#[test]
fn test_query_as_macro_expansion() {
let q = sz_orm_core::query_as!(User, "SELECT id, name FROM users WHERE id = 1");
assert_eq!(q.sql(), "SELECT id, name FROM users WHERE id = 1");
}
#[test]
fn test_query_as_macro_path_type() {
let q = sz_orm_core::query_as!(crate::User, "SELECT id, name FROM users");
assert!(q.sql().contains("SELECT"));
}
#[test]
fn test_from_query_result_row_desc() {
let desc = <User as sz_orm_core::FromQueryResult>::row_desc();
assert_eq!(desc, vec!["id", "name"]);
}
#[test]
fn test_from_query_result_column_types() {
let types = <User as sz_orm_core::FromQueryResult>::column_types();
assert_eq!(types, vec![("id", "BIGINT"), ("name", "TEXT")]);
}
#[test]
fn test_from_query_result_const_column_types() {
const TYPES: &[(&str, &str)] = User::__sz_orm_column_types();
assert_eq!(TYPES, vec![("id", "BIGINT"), ("name", "TEXT")]);
assert_eq!(
TYPES,
<User as sz_orm_core::FromQueryResult>::column_types()
);
}
#[derive(FromQueryResult)]
#[allow(dead_code)]
struct UserWithColumnRename {
id: i64,
#[column(name = "user_name")]
name: String,
}
#[test]
fn test_from_query_result_row_desc_with_rename() {
let desc = <UserWithColumnRename as sz_orm_core::FromQueryResult>::row_desc();
assert_eq!(desc, vec!["id", "user_name"]);
}
#[test]
fn test_from_query_result_column_types_with_rename() {
let types = <UserWithColumnRename as sz_orm_core::FromQueryResult>::column_types();
assert_eq!(types, vec![("id", "BIGINT"), ("user_name", "TEXT")]);
}
#[derive(FromQueryResult)]
#[allow(dead_code)]
struct UserWithOption {
id: i64,
name: Option<String>,
age: Option<i32>,
}
#[test]
fn test_from_query_result_column_types_with_option() {
let types = <UserWithOption as sz_orm_core::FromQueryResult>::column_types();
assert_eq!(
types,
vec![("id", "BIGINT"), ("name", "TEXT"), ("age", "INTEGER")]
);
}