From 22f2e33d659d45973bce5bd4e21044ab5f88faf1 Mon Sep 17 00:00:00 2001 From: Kaarel Raspel Date: Fri, 11 Dec 2020 00:19:05 +0200 Subject: [PATCH] Fix use cases for `clause.Eq` and `clause.Neq` when value is nil pointer of a primitive type --- clause/expression.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/clause/expression.go b/clause/expression.go index b30c46b0..3844d66b 100644 --- a/clause/expression.go +++ b/clause/expression.go @@ -203,7 +203,7 @@ type Eq struct { func (eq Eq) Build(builder Builder) { builder.WriteQuoted(eq.Column) - if eq.Value == nil { + if eqNil(eq.Value) { builder.WriteString(" IS NULL") } else { builder.WriteString(" = ") @@ -221,7 +221,7 @@ type Neq Eq func (neq Neq) Build(builder Builder) { builder.WriteQuoted(neq.Column) - if neq.Value == nil { + if eqNil(neq.Value) { builder.WriteString(" IS NOT NULL") } else { builder.WriteString(" <> ") @@ -299,3 +299,12 @@ func (like Like) NegationBuild(builder Builder) { builder.WriteString(" NOT LIKE ") 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() +}