From 46320f9630087e010a31ab580294cc9137eb865f Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 16 Feb 2017 12:07:00 +0800 Subject: [PATCH] refactor notificationsForUser since xorm In support slice of customerize type (#956) --- models/notification.go | 11 ++++----- vendor/github.com/go-xorm/builder/cond_in.go | 24 ++++++++++++++++---- vendor/vendor.json | 6 ++--- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/models/notification.go b/models/notification.go index 7ef8f058ce..bba662c06c 100644 --- a/models/notification.go +++ b/models/notification.go @@ -189,23 +189,20 @@ func NotificationsForUser(user *User, statuses []NotificationStatus, page, perPa return notificationsForUser(x, user, statuses, page, perPage) } func notificationsForUser(e Engine, user *User, statuses []NotificationStatus, page, perPage int) (notifications []*Notification, err error) { - // FIXME: Xorm does not support aliases types (like NotificationStatus) on In() method - s := make([]uint8, len(statuses)) - for i, status := range statuses { - s[i] = uint8(status) + if len(statuses) == 0 { + return } sess := e. Where("user_id = ?", user.ID). - In("status", s). + In("status", statuses). OrderBy("updated_unix DESC") if page > 0 && perPage > 0 { sess.Limit(perPage, (page-1)*perPage) } - err = sess. - Find(¬ifications) + err = sess.Find(¬ifications) return } diff --git a/vendor/github.com/go-xorm/builder/cond_in.go b/vendor/github.com/go-xorm/builder/cond_in.go index 9ada13b700..692d2e289a 100644 --- a/vendor/github.com/go-xorm/builder/cond_in.go +++ b/vendor/github.com/go-xorm/builder/cond_in.go @@ -6,6 +6,7 @@ package builder import ( "fmt" + "reflect" "strings" ) @@ -195,11 +196,26 @@ func (condIn condIn) WriteTo(w Writer) error { if len(condIn.vals) <= 0 { return ErrNoInConditions } - questionMark := strings.Repeat("?,", len(condIn.vals)) - if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { - return err + + v := reflect.ValueOf(condIn.vals[0]) + if v.Kind() == reflect.Slice { + l := v.Len() + + questionMark := strings.Repeat("?,", l) + if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { + return err + } + + for i := 0; i < l; i++ { + w.Append(v.Index(i).Interface()) + } + } else { + questionMark := strings.Repeat("?,", len(condIn.vals)) + if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil { + return err + } + w.Append(condIn.vals...) } - w.Append(condIn.vals...) } return nil } diff --git a/vendor/vendor.json b/vendor/vendor.json index b255e005b9..f77de08d1f 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -437,10 +437,10 @@ "revisionTime": "2016-11-01T11:13:14Z" }, { - "checksumSHA1": "sDRC697KuCbpI+1i2VPhyqgAvjs=", + "checksumSHA1": "Fh6Svimt+QyXHbaVxgSV7qwUHL8=", "path": "github.com/go-xorm/builder", - "revision": "db75972580de4a7c6c20fff5b16a924c3de3fa12", - "revisionTime": "2016-12-14T02:05:24Z" + "revision": "9c357861b643b7dd1023551fdf116b8d42030146", + "revisionTime": "2017-02-16T03:03:40Z" }, { "checksumSHA1": "OCcksAYN5m0kc5yJF/Ba4VVHqeA=",