refactor notificationsForUser since xorm In support slice of customerize type (#956)
This commit is contained in:
parent
0642cb330c
commit
46320f9630
|
@ -189,23 +189,20 @@ func NotificationsForUser(user *User, statuses []NotificationStatus, page, perPa
|
||||||
return notificationsForUser(x, user, statuses, page, perPage)
|
return notificationsForUser(x, user, statuses, page, perPage)
|
||||||
}
|
}
|
||||||
func notificationsForUser(e Engine, user *User, statuses []NotificationStatus, page, perPage int) (notifications []*Notification, err error) {
|
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
|
if len(statuses) == 0 {
|
||||||
s := make([]uint8, len(statuses))
|
return
|
||||||
for i, status := range statuses {
|
|
||||||
s[i] = uint8(status)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sess := e.
|
sess := e.
|
||||||
Where("user_id = ?", user.ID).
|
Where("user_id = ?", user.ID).
|
||||||
In("status", s).
|
In("status", statuses).
|
||||||
OrderBy("updated_unix DESC")
|
OrderBy("updated_unix DESC")
|
||||||
|
|
||||||
if page > 0 && perPage > 0 {
|
if page > 0 && perPage > 0 {
|
||||||
sess.Limit(perPage, (page-1)*perPage)
|
sess.Limit(perPage, (page-1)*perPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = sess.
|
err = sess.Find(¬ifications)
|
||||||
Find(¬ifications)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ package builder
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -195,12 +196,27 @@ func (condIn condIn) WriteTo(w Writer) error {
|
||||||
if len(condIn.vals) <= 0 {
|
if len(condIn.vals) <= 0 {
|
||||||
return ErrNoInConditions
|
return ErrNoInConditions
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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))
|
questionMark := strings.Repeat("?,", len(condIn.vals))
|
||||||
if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil {
|
if _, err := fmt.Fprintf(w, "%s IN (%s)", condIn.col, questionMark[:len(questionMark)-1]); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
w.Append(condIn.vals...)
|
w.Append(condIn.vals...)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -437,10 +437,10 @@
|
||||||
"revisionTime": "2016-11-01T11:13:14Z"
|
"revisionTime": "2016-11-01T11:13:14Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "sDRC697KuCbpI+1i2VPhyqgAvjs=",
|
"checksumSHA1": "Fh6Svimt+QyXHbaVxgSV7qwUHL8=",
|
||||||
"path": "github.com/go-xorm/builder",
|
"path": "github.com/go-xorm/builder",
|
||||||
"revision": "db75972580de4a7c6c20fff5b16a924c3de3fa12",
|
"revision": "9c357861b643b7dd1023551fdf116b8d42030146",
|
||||||
"revisionTime": "2016-12-14T02:05:24Z"
|
"revisionTime": "2017-02-16T03:03:40Z"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"checksumSHA1": "OCcksAYN5m0kc5yJF/Ba4VVHqeA=",
|
"checksumSHA1": "OCcksAYN5m0kc5yJF/Ba4VVHqeA=",
|
||||||
|
|
Loading…
Reference in New Issue