Fix use cases for clause.Eq
and clause.Neq
when value is nil pointer of a primitive type
This commit is contained in:
parent
3c9c3739db
commit
22f2e33d65
@ -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()
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user