dialect/sql/sqljson: cast marshaled args as json (#3008)

This commit is contained in:
Ariel Mashraki
2022-10-11 14:15:01 +03:00
committed by GitHub
parent a26e21ff6a
commit cf137c665a
14 changed files with 310 additions and 34 deletions

View File

@@ -147,7 +147,7 @@ func ValueContains(column string, arg any, opts ...Option) *sql.Predicate {
case dialect.MySQL:
b.WriteString("JSON_CONTAINS").Wrap(func(b *sql.Builder) {
b.Ident(column).Comma()
b.Arg(marshal(arg)).Comma()
b.Arg(marshalArg(arg)).Comma()
path.mysqlPath(b)
})
b.WriteOp(sql.OpEQ).Arg(1)
@@ -163,7 +163,7 @@ func ValueContains(column string, arg any, opts ...Option) *sql.Predicate {
opts = normalizePG(b, arg, opts)
path.Cast = "jsonb"
path.value(b)
b.WriteString(" @> ").Arg(marshal(arg))
b.WriteString(" @> ").Arg(marshalArg(arg))
}
})
}
@@ -642,8 +642,8 @@ func allString(v []any) bool {
return true
}
// marshal stringifies the given argument to a valid JSON document.
func marshal(arg any) any {
// marshalArg stringifies the given argument to a valid JSON document.
func marshalArg(arg any) any {
if buf, err := json.Marshal(arg); err == nil {
arg = string(buf)
}