parent
1102a2c6da
commit
fb2356b17a
3 changed files with 22 additions and 0 deletions
|
@ -9,6 +9,26 @@ use crate::sql::array::Union;
|
|||
use crate::sql::array::Uniq;
|
||||
use crate::sql::value::Value;
|
||||
|
||||
pub fn add((array, value): (Value, Value)) -> Result<Value, Error> {
|
||||
match (array, value) {
|
||||
(Value::Array(mut arr), Value::Array(other)) => {
|
||||
for v in other.0 {
|
||||
if !arr.0.iter().any(|x| *x == v) {
|
||||
arr.0.push(v)
|
||||
}
|
||||
}
|
||||
Ok(arr.into())
|
||||
}
|
||||
(Value::Array(mut arr), value) => {
|
||||
if !arr.0.iter().any(|x| *x == value) {
|
||||
arr.0.push(value)
|
||||
}
|
||||
Ok(arr.into())
|
||||
}
|
||||
_ => Ok(Value::None),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn all((arg,): (Value,)) -> Result<Value, Error> {
|
||||
match arg {
|
||||
Value::Array(v) => Ok(v.iter().all(Value::is_truthy).into()),
|
||||
|
|
|
@ -66,6 +66,7 @@ pub fn synchronous(ctx: &Context<'_>, name: &str, args: Vec<Value>) -> Result<Va
|
|||
dispatch!(
|
||||
name,
|
||||
args,
|
||||
"array::add" => array::add,
|
||||
"array::all" => array::all,
|
||||
"array::any" => array::any,
|
||||
"array::append" => array::append,
|
||||
|
|
|
@ -303,6 +303,7 @@ fn function_names(i: &str) -> IResult<&str, &str> {
|
|||
fn function_array(i: &str) -> IResult<&str, &str> {
|
||||
alt((
|
||||
alt((
|
||||
tag("array::add"),
|
||||
tag("array::all"),
|
||||
tag("array::any"),
|
||||
tag("array::append"),
|
||||
|
|
Loading…
Reference in a new issue