Files
dbx/jet_expr.go
end 7e30272020 feat(jet): add ExprPtrs for pointer slice expressions
ExprPtrs dereferences []*T values, skips nil entries, and maps survivors
through a converter.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-29 18:49:19 -07:00

56 lines
1.5 KiB
Go

package dbx
import (
"fmt"
"github.com/go-jet/jet/v2/mysql"
)
// ExprValues converts a list of values to a list of Expression values using
// function f to transform the values (mysql.String for strings, mysql.Uint64, etc).
func ExprValues[T any](values []T, f func(T) Expression) []Expression {
expressions := make([]Expression, len(values))
for i, v := range values {
expressions[i] = f(v)
}
return expressions
}
// ExprPtrs converts a list of pointers to Expression values, skipping nil
// entries. Function f receives the dereferenced value.
func ExprPtrs[T any](values []*T, f func(T) Expression) []Expression {
expressions := make([]Expression, 0, len(values))
for _, v := range values {
if v == nil {
continue
}
expressions = append(expressions, f(*v))
}
return expressions
}
// ExprStringers converts a list of fmt.Stringers to a list of Expression values.
func ExprStringers(values []fmt.Stringer) []Expression {
expressions := make([]Expression, len(values))
for i, v := range values {
expressions[i] = mysql.String(v.String())
}
return expressions
}
// StringKSUIDExpr returns a Jet expression for a string-encoded KSUID column.
func StringKSUIDExpr(id StringKSUID) Expression {
if id.IsNil() {
return mysql.StringExp(mysql.NULL)
}
return mysql.String(id.String())
}
// BinaryKSUIDExpr returns a Jet expression for a binary-encoded KSUID column.
func BinaryKSUIDExpr(id BinaryKSUID) Expression {
if id.IsNil() {
return mysql.StringExp(mysql.NULL)
}
return mysql.String(string(id.Bytes()))
}