Improve type::is::record()
method (#2736)
This commit is contained in:
parent
fba24969b6
commit
a0072cf133
3 changed files with 27 additions and 3 deletions
|
@ -201,8 +201,11 @@ pub mod is {
|
|||
Ok(matches!(arg, Value::Geometry(Geometry::Polygon(_))).into())
|
||||
}
|
||||
|
||||
pub fn record((arg,): (Value,)) -> Result<Value, Error> {
|
||||
Ok(arg.is_record().into())
|
||||
pub fn record((arg, table): (Value, Option<String>)) -> Result<Value, Error> {
|
||||
Ok(match table {
|
||||
Some(tb) => arg.is_record_of_table(tb).into(),
|
||||
None => arg.is_record().into(),
|
||||
})
|
||||
}
|
||||
|
||||
pub fn string((arg,): (Value,)) -> Result<Value, Error> {
|
||||
|
|
|
@ -922,6 +922,17 @@ impl Value {
|
|||
matches!(self, Value::Thing(_))
|
||||
}
|
||||
|
||||
/// Check if this Value is a Thing, and belongs to a certain table
|
||||
pub fn is_record_of_table(&self, table: String) -> bool {
|
||||
match self {
|
||||
Value::Thing(Thing {
|
||||
tb,
|
||||
..
|
||||
}) => *tb == table,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if this Value is a Geometry
|
||||
pub fn is_geometry(&self) -> bool {
|
||||
matches!(self, Value::Geometry(_))
|
||||
|
|
|
@ -5117,11 +5117,21 @@ async fn function_type_is_record() -> Result<(), Error> {
|
|||
let sql = r#"
|
||||
RETURN type::is::record(person:john);
|
||||
RETURN type::is::record("123");
|
||||
RETURN type::is::record(person:john, 'person');
|
||||
RETURN type::is::record(person:john, 'user');
|
||||
"#;
|
||||
let dbs = new_ds().await?;
|
||||
let ses = Session::owner().with_ns("test").with_db("test");
|
||||
let res = &mut dbs.execute(sql, &ses, None).await?;
|
||||
assert_eq!(res.len(), 2);
|
||||
assert_eq!(res.len(), 4);
|
||||
//
|
||||
let tmp = res.remove(0).result?;
|
||||
let val = Value::from(true);
|
||||
assert_eq!(tmp, val);
|
||||
//
|
||||
let tmp = res.remove(0).result?;
|
||||
let val = Value::from(false);
|
||||
assert_eq!(tmp, val);
|
||||
//
|
||||
let tmp = res.remove(0).result?;
|
||||
let val = Value::from(true);
|
||||
|
|
Loading…
Reference in a new issue