#![cfg(feature = "dialect-redshift")]
use sz_orm_core::dialect::{ColumnDef, Dialect, PostgreSqlDialect, RedshiftDialect};
use sz_orm_core::DbType;
#[test]
fn test_redshift_db_type() {
let dialect = RedshiftDialect;
assert_eq!(dialect.db_type(), DbType::Redshift);
}
#[test]
fn test_redshift_quote() {
let dialect = RedshiftDialect;
assert_eq!(dialect.quote("users"), "\"users\"");
assert_eq!(dialect.quote("user\"id"), "\"user\"\"id\"");
}
#[test]
fn test_redshift_escape_string() {
let dialect = RedshiftDialect;
assert_eq!(dialect.escape_string("hello"), "hello");
assert_eq!(dialect.escape_string("it's"), "it''s");
}
#[test]
fn test_redshift_supports_returning() {
let dialect = RedshiftDialect;
let pg = PostgreSqlDialect;
assert_eq!(dialect.supports_returning(), pg.supports_returning());
}
#[test]
fn test_redshift_pagination() {
let dialect = RedshiftDialect;
let sql = dialect.build_pagination("SELECT * FROM users", 2, 10);
assert_eq!(sql, "SELECT * FROM users LIMIT 10 OFFSET 10");
}
#[test]
fn test_redshift_json_type() {
let dialect = RedshiftDialect;
assert_eq!(dialect.json_type(), "JSONB");
}
#[test]
fn test_redshift_json_extract() {
let dialect = RedshiftDialect;
let sql = dialect.json_extract("data", "name");
assert!(sql.contains("#>>"));
assert!(sql.contains("data"));
}
#[test]
fn test_redshift_concat() {
let dialect = RedshiftDialect;
let sql = dialect.concat(&["a", "b", "c"]);
assert_eq!(sql, "CONCAT(a, b, c)");
}
#[test]
fn test_redshift_auto_increment() {
let dialect = RedshiftDialect;
assert_eq!(
dialect.auto_increment_keyword(),
"GENERATED BY DEFAULT AS IDENTITY"
);
}
#[test]
fn test_redshift_build_create_table() {
let dialect = RedshiftDialect;
let columns = vec![ColumnDef {
name: "id".to_string(),
sql_type: "BIGINT".to_string(),
nullable: false,
default: None,
auto_increment: false,
primary_key: true,
}];
let sql = dialect.build_create_table("users", &columns);
assert!(sql.contains("CREATE TABLE"));
assert!(sql.contains("\"users\""));
assert!(sql.contains("\"id\""));
assert!(sql.contains("NOT NULL"));
assert!(sql.contains("PRIMARY KEY"));
}
#[test]
fn test_redshift_copy() {
let dialect = RedshiftDialect;
let sql = dialect.build_copy(
"mytable",
"s3://bucket/data.csv",
"aws_iam_role=arn:aws:iam::123",
);
assert!(sql.contains("COPY"));
assert!(sql.contains("\"mytable\""));
assert!(sql.contains("s3://bucket/data.csv"));
assert!(sql.contains("FORMAT AS CSV"));
}
#[test]
fn test_redshift_unload() {
let dialect = RedshiftDialect;
let sql = dialect.build_unload(
"SELECT * FROM users",
"s3://bucket/output/",
"aws_iam_role=arn:aws:iam::123",
);
assert!(sql.contains("UNLOAD"));
assert!(sql.contains("SELECT * FROM users"));
assert!(sql.contains("s3://bucket/output/"));
}
#[test]
fn test_redshift_clone_box() {
let dialect = RedshiftDialect;
let cloned = dialect.clone_box();
assert_eq!(cloned.db_type(), DbType::Redshift);
}
#[test]
fn test_redshift_get_dialect() {
use sz_orm_core::get_dialect;
let dialect = get_dialect(DbType::Redshift).unwrap();
assert_eq!(dialect.db_type(), DbType::Redshift);
assert_eq!(dialect.quote("users"), "\"users\"");
}
#[test]
fn test_redshift_pg_consistency() {
let redshift = RedshiftDialect;
let pg = PostgreSqlDialect;
assert_eq!(redshift.quote("table"), pg.quote("table"));
assert_eq!(redshift.escape_string("test's"), pg.escape_string("test's"));
assert_eq!(
redshift.build_pagination("SELECT 1", 1, 10),
pg.build_pagination("SELECT 1", 1, 10)
);
assert_eq!(redshift.json_type(), pg.json_type());
assert_eq!(redshift.concat(&["a", "b"]), pg.concat(&["a", "b"]));
}