summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/relation_join.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/relation_join.go')
-rw-r--r--vendor/github.com/uptrace/bun/relation_join.go26
1 files changed, 20 insertions, 6 deletions
diff --git a/vendor/github.com/uptrace/bun/relation_join.go b/vendor/github.com/uptrace/bun/relation_join.go
index 19dda774e..200f6758a 100644
--- a/vendor/github.com/uptrace/bun/relation_join.go
+++ b/vendor/github.com/uptrace/bun/relation_join.go
@@ -3,6 +3,7 @@ package bun
import (
"context"
"reflect"
+ "time"
"github.com/uptrace/bun/dialect/feature"
"github.com/uptrace/bun/internal"
@@ -256,14 +257,27 @@ func (j *relationJoin) appendBaseAlias(fmter schema.Formatter, b []byte) []byte
return append(b, j.BaseModel.Table().SQLAlias...)
}
-func (j *relationJoin) appendSoftDelete(b []byte, flags internal.Flag) []byte {
+func (j *relationJoin) appendSoftDelete(fmter schema.Formatter, b []byte, flags internal.Flag) []byte {
b = append(b, '.')
- b = append(b, j.JoinModel.Table().SoftDeleteField.SQLName...)
- if flags.Has(deletedFlag) {
- b = append(b, " IS NOT NULL"...)
+
+ field := j.JoinModel.Table().SoftDeleteField
+ b = append(b, field.SQLName...)
+
+ if field.IsPtr || field.NullZero {
+ if flags.Has(deletedFlag) {
+ b = append(b, " IS NOT NULL"...)
+ } else {
+ b = append(b, " IS NULL"...)
+ }
} else {
- b = append(b, " IS NULL"...)
+ if flags.Has(deletedFlag) {
+ b = append(b, " != "...)
+ } else {
+ b = append(b, " = "...)
+ }
+ b = fmter.Dialect().AppendTime(b, time.Time{})
}
+
return b
}
@@ -306,7 +320,7 @@ func (j *relationJoin) appendHasOneJoin(
if isSoftDelete {
b = append(b, " AND "...)
b = j.appendAlias(fmter, b)
- b = j.appendSoftDelete(b, q.flags)
+ b = j.appendSoftDelete(fmter, b, q.flags)
}
return b, nil