use ormer::Model;
use ormer::abstract_layer::DbType;
use ormer::generate_create_table_sql;
#[derive(Model)]
#[table = "users"]
struct TestUser {
#[primary]
id: i32,
name: String,
age: i32,
email: Option<String>,
}
#[derive(Model)]
#[table = "complete_types"]
struct TestCompleteTypes {
#[primary]
id: i64,
text_val: String,
optional_text: Option<String>,
optional_int: Option<i32>,
bool_val: bool,
optional_bool: Option<bool>,
}
#[cfg(test)]
mod create_table_tests {
use super::*;
#[cfg(feature = "turso")]
#[test]
fn test_turso_create_table_sql() {
let sql = generate_create_table_sql::<TestUser>(DbType::Turso);
assert!(sql.contains("id INTEGER PRIMARY KEY"));
assert!(sql.contains("name TEXT NOT NULL"));
assert!(sql.contains("age INTEGER NOT NULL"));
assert!(sql.contains("email TEXT"));
println!("Turso SQL: {}", sql);
}
#[cfg(feature = "postgresql")]
#[test]
fn test_postgresql_create_table_sql() {
let sql = generate_create_table_sql::<TestUser>(DbType::PostgreSQL);
assert!(sql.contains("id INTEGER PRIMARY KEY"));
assert!(sql.contains("name VARCHAR NOT NULL"));
assert!(sql.contains("age INTEGER NOT NULL"));
assert!(sql.contains("email VARCHAR"));
println!("PostgreSQL SQL: {}", sql);
}
#[cfg(feature = "mysql")]
#[test]
fn test_mysql_create_table_sql() {
let sql = generate_create_table_sql::<TestUser>(DbType::MySQL);
assert!(sql.contains("id INT PRIMARY KEY"));
assert!(sql.contains("name VARCHAR(255) NOT NULL"));
assert!(sql.contains("age INT NOT NULL"));
assert!(sql.contains("email VARCHAR(255)"));
println!("MySQL SQL: {}", sql);
}
#[cfg(all(feature = "turso", feature = "postgresql", feature = "mysql"))]
#[test]
fn test_different_databases_produce_different_sql() {
let turso_sql = generate_create_table_sql::<TestUser>(DbType::Turso);
let pg_sql = generate_create_table_sql::<TestUser>(DbType::PostgreSQL);
let mysql_sql = generate_create_table_sql::<TestUser>(DbType::MySQL);
assert_ne!(turso_sql, pg_sql);
assert_ne!(turso_sql, mysql_sql);
assert_ne!(pg_sql, mysql_sql);
}
#[cfg(feature = "postgresql")]
#[test]
fn test_postgresql_complete_types() {
let sql = generate_create_table_sql::<TestCompleteTypes>(DbType::PostgreSQL);
assert!(sql.contains("id BIGINT PRIMARY KEY"));
assert!(sql.contains("text_val VARCHAR NOT NULL"));
assert!(sql.contains("optional_text VARCHAR")); assert!(sql.contains("optional_int INTEGER")); assert!(sql.contains("bool_val BOOLEAN NOT NULL"));
assert!(sql.contains("optional_bool BOOLEAN"));
println!("PostgreSQL Complete Types SQL: {}", sql);
}
#[cfg(feature = "mysql")]
#[test]
fn test_mysql_complete_types() {
let sql = generate_create_table_sql::<TestCompleteTypes>(DbType::MySQL);
assert!(sql.contains("id BIGINT PRIMARY KEY"));
assert!(sql.contains("text_val VARCHAR(255) NOT NULL"));
assert!(sql.contains("optional_text VARCHAR(255)")); assert!(sql.contains("optional_int INT")); assert!(sql.contains("bool_val TINYINT(1) NOT NULL"));
assert!(sql.contains("optional_bool TINYINT(1)"));
println!("MySQL Complete Types SQL: {}", sql);
}
#[cfg(feature = "turso")]
#[test]
fn test_turso_complete_types() {
let sql = generate_create_table_sql::<TestCompleteTypes>(DbType::Turso);
assert!(sql.contains("id INTEGER PRIMARY KEY"));
assert!(sql.contains("text_val TEXT NOT NULL"));
assert!(sql.contains("optional_text TEXT")); assert!(sql.contains("optional_int INTEGER")); assert!(sql.contains("bool_val INTEGER NOT NULL"));
assert!(sql.contains("optional_bool INTEGER"));
println!("Turso Complete Types SQL: {}", sql);
}
}