use rbs::Value;
use rbatis_codegen::into_sql::IntoSql;
use std::borrow::Cow;
#[test]
fn test_into_sql_primitives() {
assert_eq!(true.sql(), "true");
assert_eq!(false.sql(), "false");
assert_eq!("test".sql(), "test");
assert_eq!("test".to_string().sql(), "test");
assert_eq!(123.sql(), "123");
assert_eq!(123i64.sql(), "123");
assert_eq!(123.5f32.sql(), "123.5");
assert_eq!(123.5f64.sql(), "123.5");
assert_eq!(123u32.sql(), "123");
assert_eq!(123u64.sql(), "123");
}
#[test]
fn test_value_into_sql() {
assert_eq!(Value::String("test".into()).sql(), "'test'");
assert_eq!(Value::I32(123).sql(), "123");
assert_eq!(Value::Bool(true).sql(), "true");
let arr = Value::Array(vec![
Value::I32(1),
Value::I32(2),
Value::String("test".into()),
]);
assert_eq!(arr.sql(), "(1,2,'test')");
let empty_arr = Value::Array(vec![]);
assert_eq!(empty_arr.sql(), "()");
let mut map = rbs::value::map::ValueMap::new();
map.insert(Value::String("key1".into()), Value::I32(123));
map.insert(Value::String("key2".into()), Value::String("value".into()));
let map_value = Value::Map(map);
let sql = map_value.sql();
assert!(sql.contains("key1123") || sql.contains("key2'value'"));
}
#[test]
fn test_value_ref_into_sql() {
let val = Value::String("test".into());
assert_eq!((&val).sql(), "'test'");
let cow = Cow::Borrowed(&val);
assert_eq!(cow.sql(), "'test'");
}
#[test]
fn test_complex_value() {
let mut inner_map = rbs::value::map::ValueMap::new();
inner_map.insert(Value::String("inner_key".into()), Value::I32(456));
let mut map = rbs::value::map::ValueMap::new();
map.insert(Value::String("key1".into()), Value::Map(inner_map));
map.insert(Value::String("key2".into()), Value::Array(vec![Value::I32(1), Value::I32(2)]));
let complex = Value::Map(map);
let sql = complex.sql();
assert!(sql.contains("key1"));
assert!(sql.contains("key2"));
assert!(sql.contains("(1,2)"));
}