Fix use cases for clause.Eq and clause.Neq when value is nil pointer of a primitive type

This commit is contained in:
Kaarel Raspel 2020-12-11 00:19:05 +02:00
parent 3c9c3739db
commit 22f2e33d65

View File

@ -203,7 +203,7 @@ type Eq struct {
func (eq Eq) Build(builder Builder) { func (eq Eq) Build(builder Builder) {
builder.WriteQuoted(eq.Column) builder.WriteQuoted(eq.Column)
if eq.Value == nil { if eqNil(eq.Value) {
builder.WriteString(" IS NULL") builder.WriteString(" IS NULL")
} else { } else {
builder.WriteString(" = ") builder.WriteString(" = ")
@ -221,7 +221,7 @@ type Neq Eq
func (neq Neq) Build(builder Builder) { func (neq Neq) Build(builder Builder) {
builder.WriteQuoted(neq.Column) builder.WriteQuoted(neq.Column)
if neq.Value == nil { if eqNil(neq.Value) {
builder.WriteString(" IS NOT NULL") builder.WriteString(" IS NOT NULL")
} else { } else {
builder.WriteString(" <> ") builder.WriteString(" <> ")
@ -299,3 +299,12 @@ func (like Like) NegationBuild(builder Builder) {
builder.WriteString(" NOT LIKE ") builder.WriteString(" NOT LIKE ")
builder.AddVar(builder, like.Value) builder.AddVar(builder, like.Value)
} }
func eqNil(value interface{}) bool {
return value == nil || eqNilReflect(value)
}
func eqNilReflect(value interface{}) bool {
reflectValue := reflect.ValueOf(value)
return reflectValue.Kind() == reflect.Ptr && reflectValue.IsNil()
}