#![allow(clippy::unwrap_used)]
use super::*;
#[test]
fn test_json_field_expr_postgres() {
assert_eq!(DatabaseType::PostgreSQL.json_field_expr("created_at"), "data->>'created_at'");
}
#[test]
fn test_typed_expr_text_is_plain_extraction() {
assert_eq!(
DatabaseType::PostgreSQL.typed_json_field_expr("name", ScalarFieldType::Text),
DatabaseType::PostgreSQL.json_field_expr("name"),
);
}
#[test]
fn test_typed_expr_postgres_numeric() {
assert_eq!(
DatabaseType::PostgreSQL.typed_json_field_expr("amount", ScalarFieldType::Numeric),
"(data->>'amount')::numeric"
);
}
#[test]
fn test_typed_expr_postgres_integer() {
assert_eq!(
DatabaseType::PostgreSQL.typed_json_field_expr("count", ScalarFieldType::Integer),
"(data->>'count')::bigint"
);
}
#[test]
fn test_typed_expr_postgres_datetime() {
assert_eq!(
DatabaseType::PostgreSQL.typed_json_field_expr("created_at", ScalarFieldType::DateTime),
"(data->>'created_at')::timestamptz"
);
}
#[test]
fn test_typed_expr_postgres_boolean() {
assert_eq!(
DatabaseType::PostgreSQL.typed_json_field_expr("is_active", ScalarFieldType::Boolean),
"(data->>'is_active')::boolean"
);
}
#[test]
fn postgres_needs_no_explicit_like_escape_clause() {
use crate::dialect::PostgresDialect;
assert_eq!((&PostgresDialect as &dyn SqlDialect).like_escape_clause(), "");
}
#[test]
fn order_by_and_where_render_the_same_cast() {
let db = DatabaseType::PostgreSQL;
for ty in [
ScalarFieldType::Text,
ScalarFieldType::Integer,
ScalarFieldType::Numeric,
ScalarFieldType::Boolean,
ScalarFieldType::DateTime,
ScalarFieldType::Date,
ScalarFieldType::Time,
] {
let order_by = db.typed_json_field_expr("amount", ty);
let base = db.json_field_expr("amount");
let where_side = db.dialect().cast_expr_as(&base, ty).into_owned();
assert_eq!(
order_by, where_side,
"{db:?} renders {ty:?} differently for ORDER BY and WHERE"
);
}
}