Skip to content

Commit

Permalink
Adding array functions
Browse files Browse the repository at this point in the history
  • Loading branch information
arjen-ag5 committed Sep 20, 2024
1 parent 78733ce commit f9368c0
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions internal/jet/func_expression.go
Original file line number Diff line number Diff line change
Expand Up @@ -663,6 +663,39 @@ func ALL[E Expression](arr Array[E]) E {
return arrayElementTypeCaster(arr, Func("ALL", arr))
}

func ARRAY_APPEND[E Expression](arr Array[E], el E) Array[E] {
return arrayTypeCaster[E](arr, Func("array_append", arr, el))
}

func ARRAY_CAT[E Expression](arr1, arr2 Array[E]) Array[E] {
return arrayTypeCaster[E](arr1, Func("array_cat", arr1, arr2))
}

func ARRAY_PREPEND[E Expression](el E, arr Array[E]) Array[E] {
return ArrayExp[E](Func("array_prepend", el, arr))
}

func ARRAY_LENGTH[E Expression](arr Array[E], el IntegerExpression) IntegerExpression {
return IntExp(Func("array_length", arr, el))
}

func arrayTypeCaster[E Expression](arrayExp Expression, exp Expression) Array[E] {
var i Expression
switch arrayExp.(type) {
case Array[StringExpression]:
i = ArrayExp[StringExpression](exp)
case Array[Int4Expression]:
i = ArrayExp[Int4Expression](exp)
case Array[Int8Expression]:
i = ArrayExp[Int8Expression](exp)
case Array[IntegerExpression]:
i = ArrayExp[IntegerExpression](exp)
case Array[BoolExpression]:
i = ArrayExp[BoolExpression](exp)
}
return i.(Array[E])
}

func arrayElementTypeCaster[E Expression](arrayExp Array[E], exp Expression) E {
var i Expression
switch arrayExp.(type) {
Expand All @@ -677,6 +710,17 @@ func arrayElementTypeCaster[E Expression](arrayExp Array[E], exp Expression) E {
return i.(E)
}

func ARRAY[E Expression](elems ...E) Array[E] {
var args = make([]Serializer, len(elems))
for i, each := range elems {
args[i] = each
}
return ArrayExp[E](CustomExpression(Token("ARRAY["), ListSerializer{
Serializers: args,
Separator: ",",
}, Token("]")))
}

//--------------------------------------------------------------------//

type funcExpressionImpl struct {
Expand Down

0 comments on commit f9368c0

Please sign in to comment.