"github.com/Unknwon/com"
"github.com/go-xorm/builder"
- "github.com/go-xorm/xorm"
"code.gitea.io/git"
api "code.gitea.io/sdk/gitea"
CreatedUnix int64 `xorm:"INDEX created"`
}
-// AfterSet updates the webhook object upon setting a column.
-func (a *Action) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- a.Created = time.Unix(a.CreatedUnix, 0).Local()
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (a *Action) AfterLoad() {
+ a.Created = time.Unix(a.CreatedUnix, 0).Local()
}
// GetOpType gets the ActionType of this action.
"code.gitea.io/gitea/modules/util"
"github.com/Unknwon/com"
- "github.com/go-xorm/xorm"
)
//NoticeType describes the notice type
CreatedUnix int64 `xorm:"INDEX created"`
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (n *Notice) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- n.Created = time.Unix(n.CreatedUnix, 0).Local()
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (n *Notice) AfterLoad() {
+ n.Created = time.Unix(n.CreatedUnix, 0).Local()
}
// TrStr returns a translation format string.
"path"
"time"
- "github.com/go-xorm/xorm"
gouuid "github.com/satori/go.uuid"
"code.gitea.io/gitea/modules/setting"
CreatedUnix int64 `xorm:"created"`
}
-// AfterSet is invoked from XORM after setting the value of a field of
+// AfterLoad is invoked from XORM after setting the value of a field of
// this object.
-func (a *Attachment) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- a.Created = time.Unix(a.CreatedUnix, 0).Local()
- }
+func (a *Attachment) AfterLoad() {
+ a.Created = time.Unix(a.CreatedUnix, 0).Local()
}
// IncreaseDownloadCount is update download count + 1
// GetAttachmentsByCommentID returns all attachments if comment by given ID.
func GetAttachmentsByCommentID(commentID int64) ([]*Attachment, error) {
+ return getAttachmentsByCommentID(x, commentID)
+}
+
+func getAttachmentsByCommentID(e Engine, commentID int64) ([]*Attachment, error) {
attachments := make([]*Attachment, 0, 10)
return attachments, x.Where("comment_id=?", commentID).Find(&attachments)
}
key.CreatedUnix = key.Created.Unix()
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (key *GPGKey) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "key_id":
- x.Where("primary_key_id=?", key.KeyID).Find(&key.SubsKey)
- case "added_unix":
- key.Added = time.Unix(key.AddedUnix, 0).Local()
- case "expired_unix":
- key.Expired = time.Unix(key.ExpiredUnix, 0).Local()
- case "created_unix":
- key.Created = time.Unix(key.CreatedUnix, 0).Local()
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (key *GPGKey) AfterLoad(session *xorm.Session) {
+ key.Added = time.Unix(key.AddedUnix, 0).Local()
+ key.Expired = time.Unix(key.ExpiredUnix, 0).Local()
+ key.Created = time.Unix(key.CreatedUnix, 0).Local()
+
+ err := session.Where("primary_key_id=?", key.KeyID).Find(&key.SubsKey)
+ if err != nil {
+ log.Error(3, "Find Sub GPGkeys[%d]: %v", key.KeyID, err)
}
}
issue.DeadlineUnix = issue.Deadline.Unix()
}
-// AfterSet is invoked from XORM after setting the value of a field of
+// AfterLoad is invoked from XORM after setting the value of a field of
// this object.
-func (issue *Issue) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "deadline_unix":
- issue.Deadline = time.Unix(issue.DeadlineUnix, 0).Local()
- case "created_unix":
- issue.Created = time.Unix(issue.CreatedUnix, 0).Local()
- case "updated_unix":
- issue.Updated = time.Unix(issue.UpdatedUnix, 0).Local()
- }
+func (issue *Issue) AfterLoad() {
+ issue.Deadline = time.Unix(issue.DeadlineUnix, 0).Local()
+ issue.Created = time.Unix(issue.CreatedUnix, 0).Local()
+ issue.Updated = time.Unix(issue.UpdatedUnix, 0).Local()
}
func (issue *Issue) loadRepo(e Engine) (err error) {
ShowTag CommentTag `xorm:"-"`
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (c *Comment) AfterSet(colName string, _ xorm.Cell) {
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (c *Comment) AfterLoad(session *xorm.Session) {
+ c.Created = time.Unix(c.CreatedUnix, 0).Local()
+ c.Updated = time.Unix(c.UpdatedUnix, 0).Local()
+
var err error
- switch colName {
- case "id":
- c.Attachments, err = GetAttachmentsByCommentID(c.ID)
- if err != nil {
- log.Error(3, "GetAttachmentsByCommentID[%d]: %v", c.ID, err)
- }
+ c.Attachments, err = getAttachmentsByCommentID(session, c.ID)
+ if err != nil {
+ log.Error(3, "getAttachmentsByCommentID[%d]: %v", c.ID, err)
+ }
- case "poster_id":
- c.Poster, err = GetUserByID(c.PosterID)
- if err != nil {
- if IsErrUserNotExist(err) {
- c.PosterID = -1
- c.Poster = NewGhostUser()
- } else {
- log.Error(3, "GetUserByID[%d]: %v", c.ID, err)
- }
+ c.Poster, err = getUserByID(session, c.PosterID)
+ if err != nil {
+ if IsErrUserNotExist(err) {
+ c.PosterID = -1
+ c.Poster = NewGhostUser()
+ } else {
+ log.Error(3, "getUserByID[%d]: %v", c.ID, err)
}
- case "created_unix":
- c.Created = time.Unix(c.CreatedUnix, 0).Local()
- case "updated_unix":
- c.Updated = time.Unix(c.UpdatedUnix, 0).Local()
}
}
m.ClosedDateUnix = m.ClosedDate.Unix()
}
-// AfterSet is invoked from XORM after setting the value of a field of
+// AfterLoad is invoked from XORM after setting the value of a field of
// this object.
-func (m *Milestone) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "num_closed_issues":
- m.NumOpenIssues = m.NumIssues - m.NumClosedIssues
-
- case "deadline_unix":
- m.Deadline = time.Unix(m.DeadlineUnix, 0).Local()
- if m.Deadline.Year() == 9999 {
- return
- }
-
- m.DeadlineString = m.Deadline.Format("2006-01-02")
- if time.Now().Local().After(m.Deadline) {
- m.IsOverDue = true
- }
+func (m *Milestone) AfterLoad() {
+ m.NumOpenIssues = m.NumIssues - m.NumClosedIssues
+ m.Deadline = time.Unix(m.DeadlineUnix, 0).Local()
+ if m.Deadline.Year() == 9999 {
+ return
+ }
- case "closed_date_unix":
- m.ClosedDate = time.Unix(m.ClosedDateUnix, 0).Local()
+ m.DeadlineString = m.Deadline.Format("2006-01-02")
+ if time.Now().Local().After(m.Deadline) {
+ m.IsOverDue = true
}
+
+ m.ClosedDate = time.Unix(m.ClosedDateUnix, 0).Local()
}
// State returns string representation of milestone status.
import (
"fmt"
"time"
-
- "github.com/go-xorm/xorm"
)
// Stopwatch represents a stopwatch for time tracking.
s.CreatedUnix = time.Now().Unix()
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (s *Stopwatch) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
-
- case "created_unix":
- s.Created = time.Unix(s.CreatedUnix, 0).Local()
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (s *Stopwatch) AfterLoad() {
+ s.Created = time.Unix(s.CreatedUnix, 0).Local()
}
func getStopwatch(e Engine, userID, issueID int64) (sw *Stopwatch, exists bool, err error) {
"time"
"github.com/go-xorm/builder"
- "github.com/go-xorm/xorm"
)
// TrackedTime represents a time that was spent for a specific issue.
IssueID int64 `xorm:"INDEX" json:"issue_id"`
UserID int64 `xorm:"INDEX" json:"user_id"`
Created time.Time `xorm:"-" json:"created"`
- CreatedUnix int64 `json:"-"`
+ CreatedUnix int64 `xorm:"created" json:"-"`
Time int64 `json:"time"`
}
-// BeforeInsert will be invoked by XORM before inserting a record
-// representing this object.
-func (t *TrackedTime) BeforeInsert() {
- t.CreatedUnix = time.Now().Unix()
-}
-
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (t *TrackedTime) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- t.Created = time.Unix(t.CreatedUnix, 0).Local()
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (t *TrackedTime) AfterLoad() {
+ t.Created = time.Unix(t.CreatedUnix, 0).Local()
}
// FindTrackedTimesOptions represent the filters for tracked times. If an ID is 0 it will be ignored.
import (
"errors"
"time"
-
- "github.com/go-xorm/xorm"
)
// LFSMetaObject stores metadata for LFS tracked files.
return sess.Commit()
}
-// AfterSet stores the LFSMetaObject creation time in the database as local time.
-func (m *LFSMetaObject) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- m.Created = time.Unix(m.CreatedUnix, 0).Local()
- }
+// AfterLoad stores the LFSMetaObject creation time in the database as local time.
+func (m *LFSMetaObject) AfterLoad() {
+ m.Created = time.Unix(m.CreatedUnix, 0).Local()
}
}
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (source *LoginSource) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- source.Created = time.Unix(source.CreatedUnix, 0).Local()
- case "updated_unix":
- source.Updated = time.Unix(source.UpdatedUnix, 0).Local()
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (source *LoginSource) AfterLoad() {
+ source.Created = time.Unix(source.CreatedUnix, 0).Local()
+ source.Updated = time.Unix(source.UpdatedUnix, 0).Local()
}
// TypeName return name of this login source type.
pr.MergedUnix = pr.Merged.Unix()
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
// Note: don't try to get Issue because will end up recursive querying.
-func (pr *PullRequest) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "merged_unix":
- if !pr.HasMerged {
- return
- }
-
- pr.Merged = time.Unix(pr.MergedUnix, 0).Local()
+func (pr *PullRequest) AfterLoad() {
+ if !pr.HasMerged {
+ return
}
+
+ pr.Merged = time.Unix(pr.MergedUnix, 0).Local()
}
// Note: don't try to get Issue because will end up recursive querying.
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/sdk/gitea"
"github.com/go-xorm/builder"
- "github.com/go-xorm/xorm"
)
// Release represents a release of repository.
}
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (r *Release) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- r.Created = time.Unix(r.CreatedUnix, 0).Local()
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (r *Release) AfterLoad() {
+ r.Created = time.Unix(r.CreatedUnix, 0).Local()
}
func (r *Release) loadAttributes(e Engine) error {
UpdatedUnix int64 `xorm:"INDEX updated"`
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (repo *Repository) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "default_branch":
- // FIXME: use models migration to solve all at once.
- if len(repo.DefaultBranch) == 0 {
- repo.DefaultBranch = "master"
- }
- case "num_closed_issues":
- repo.NumOpenIssues = repo.NumIssues - repo.NumClosedIssues
- case "num_closed_pulls":
- repo.NumOpenPulls = repo.NumPulls - repo.NumClosedPulls
- case "num_closed_milestones":
- repo.NumOpenMilestones = repo.NumMilestones - repo.NumClosedMilestones
- case "created_unix":
- repo.Created = time.Unix(repo.CreatedUnix, 0).Local()
- case "updated_unix":
- repo.Updated = time.Unix(repo.UpdatedUnix, 0)
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (repo *Repository) AfterLoad() {
+ // FIXME: use models migration to solve all at once.
+ if len(repo.DefaultBranch) == 0 {
+ repo.DefaultBranch = "master"
+ }
+
+ repo.NumOpenIssues = repo.NumIssues - repo.NumClosedIssues
+ repo.NumOpenPulls = repo.NumPulls - repo.NumClosedPulls
+ repo.NumOpenMilestones = repo.NumMilestones - repo.NumClosedMilestones
+ repo.Created = time.Unix(repo.CreatedUnix, 0).Local()
+ repo.Updated = time.Unix(repo.UpdatedUnix, 0)
}
// MustOwner always returns a valid *User object to avoid
}
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (m *Mirror) AfterSet(colName string, _ xorm.Cell) {
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (m *Mirror) AfterLoad(session *xorm.Session) {
if m == nil {
return
}
var err error
- switch colName {
- case "repo_id":
- m.Repo, err = GetRepositoryByID(m.RepoID)
- if err != nil {
- log.Error(3, "GetRepositoryByID[%d]: %v", m.ID, err)
- }
- case "updated_unix":
- m.Updated = time.Unix(m.UpdatedUnix, 0).Local()
- case "next_update_unix":
- m.NextUpdate = time.Unix(m.NextUpdateUnix, 0).Local()
+ m.Repo, err = getRepositoryByID(session, m.RepoID)
+ if err != nil {
+ log.Error(3, "getRepositoryByID[%d]: %v", m.ID, err)
}
+
+ m.Updated = time.Unix(m.UpdatedUnix, 0).Local()
+ m.NextUpdate = time.Unix(m.NextUpdateUnix, 0).Local()
}
// ScheduleNextUpdate calculates and sets next update time.
}
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (r *RepoUnit) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- r.Created = time.Unix(r.CreatedUnix, 0).Local()
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (r *RepoUnit) AfterLoad() {
+ r.Created = time.Unix(r.CreatedUnix, 0).Local()
}
// Unit returns Unit
Created time.Time `xorm:"-"`
CreatedUnix int64 `xorm:"created"`
- Updated time.Time `xorm:"-"` // Note: Updated must below Created for AfterSet.
+ Updated time.Time `xorm:"-"`
UpdatedUnix int64 `xorm:"updated"`
HasRecentActivity bool `xorm:"-"`
HasUsed bool `xorm:"-"`
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (key *PublicKey) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- key.Created = time.Unix(key.CreatedUnix, 0).Local()
- case "updated_unix":
- key.Updated = time.Unix(key.UpdatedUnix, 0).Local()
- key.HasUsed = key.Updated.After(key.Created)
- key.HasRecentActivity = key.Updated.Add(7 * 24 * time.Hour).After(time.Now())
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (key *PublicKey) AfterLoad() {
+ key.Created = time.Unix(key.CreatedUnix, 0).Local()
+ key.Updated = time.Unix(key.UpdatedUnix, 0).Local()
+ key.HasUsed = key.Updated.After(key.Created)
+ key.HasRecentActivity = key.Updated.Add(7 * 24 * time.Hour).After(time.Now())
}
// OmitEmail returns content of public key without email address.
Created time.Time `xorm:"-"`
CreatedUnix int64 `xorm:"created"`
- Updated time.Time `xorm:"-"` // Note: Updated must below Created for AfterSet.
+ Updated time.Time `xorm:"-"`
UpdatedUnix int64 `xorm:"updated"`
HasRecentActivity bool `xorm:"-"`
HasUsed bool `xorm:"-"`
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (key *DeployKey) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- key.Created = time.Unix(key.CreatedUnix, 0).Local()
- case "updated_unix":
- key.Updated = time.Unix(key.UpdatedUnix, 0).Local()
- key.HasUsed = key.Updated.After(key.Created)
- key.HasRecentActivity = key.Updated.Add(7 * 24 * time.Hour).After(time.Now())
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (key *DeployKey) AfterLoad() {
+ key.Created = time.Unix(key.CreatedUnix, 0).Local()
+ key.Updated = time.Unix(key.UpdatedUnix, 0).Local()
+ key.HasUsed = key.Updated.After(key.Created)
+ key.HasRecentActivity = key.Updated.Add(7 * 24 * time.Hour).After(time.Now())
}
// GetContent gets associated public key content.
UpdatedUnix int64 `xorm:"INDEX updated"`
}
-// AfterSet is invoked from XORM after setting the value of a field of
+// AfterLoad is invoked from XORM after setting the value of a field of
// this object.
-func (status *CommitStatus) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- status.Created = time.Unix(status.CreatedUnix, 0).Local()
- case "updated_unix":
- status.Updated = time.Unix(status.UpdatedUnix, 0).Local()
- }
+func (status *CommitStatus) AfterLoad() {
+ status.Created = time.Unix(status.CreatedUnix, 0).Local()
+ status.Updated = time.Unix(status.UpdatedUnix, 0).Local()
}
func (status *CommitStatus) loadRepo(e Engine) (err error) {
import (
"time"
- "github.com/go-xorm/xorm"
gouuid "github.com/satori/go.uuid"
"code.gitea.io/gitea/modules/base"
Created time.Time `xorm:"-"`
CreatedUnix int64 `xorm:"INDEX created"`
- Updated time.Time `xorm:"-"` // Note: Updated must below Created for AfterSet.
+ Updated time.Time `xorm:"-"`
UpdatedUnix int64 `xorm:"INDEX updated"`
HasRecentActivity bool `xorm:"-"`
HasUsed bool `xorm:"-"`
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (t *AccessToken) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- t.Created = time.Unix(t.CreatedUnix, 0).Local()
- case "updated_unix":
- t.Updated = time.Unix(t.UpdatedUnix, 0).Local()
- t.HasUsed = t.Updated.After(t.Created)
- t.HasRecentActivity = t.Updated.Add(7 * 24 * time.Hour).After(time.Now())
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (t *AccessToken) AfterLoad() {
+ t.Created = time.Unix(t.CreatedUnix, 0).Local()
+ t.Updated = time.Unix(t.UpdatedUnix, 0).Local()
+ t.HasUsed = t.Updated.After(t.Created)
+ t.HasRecentActivity = t.Updated.Add(7 * 24 * time.Hour).After(time.Now())
}
// NewAccessToken creates new access token.
"time"
"github.com/Unknwon/com"
- "github.com/go-xorm/xorm"
"github.com/pquerna/otp/totp"
"code.gitea.io/gitea/modules/base"
Created time.Time `xorm:"-"`
CreatedUnix int64 `xorm:"INDEX created"`
- Updated time.Time `xorm:"-"` // Note: Updated must below Created for AfterSet.
+ Updated time.Time `xorm:"-"`
UpdatedUnix int64 `xorm:"INDEX updated"`
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (t *TwoFactor) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- t.Created = time.Unix(t.CreatedUnix, 0).Local()
- case "updated_unix":
- t.Updated = time.Unix(t.UpdatedUnix, 0).Local()
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (t *TwoFactor) AfterLoad() {
+ t.Created = time.Unix(t.CreatedUnix, 0).Local()
+ t.Updated = time.Unix(t.UpdatedUnix, 0).Local()
}
// GenerateScratchToken recreates the scratch token the user is using.
return UpdateUserCols(u, "diff_view_style")
}
-// AfterSet is invoked from XORM after setting the value of a field of this object.
-func (u *User) AfterSet(colName string, _ xorm.Cell) {
- switch colName {
- case "created_unix":
- u.Created = time.Unix(u.CreatedUnix, 0).Local()
- case "updated_unix":
- u.Updated = time.Unix(u.UpdatedUnix, 0).Local()
- case "last_login_unix":
- u.LastLogin = time.Unix(u.LastLoginUnix, 0).Local()
- }
+// AfterLoad is invoked from XORM after setting the values of all fields of this object.
+func (u *User) AfterLoad() {
+ u.Created = time.Unix(u.CreatedUnix, 0).Local()
+ u.Updated = time.Unix(u.UpdatedUnix, 0).Local()
+ u.LastLogin = time.Unix(u.LastLoginUnix, 0).Local()
}
// getEmail returns an noreply email, if the user has set to keep his
"code.gitea.io/gitea/modules/sync"
api "code.gitea.io/sdk/gitea"
- "github.com/go-xorm/xorm"
gouuid "github.com/satori/go.uuid"
)
UpdatedUnix int64 `xorm:"INDEX updated"`
}
-// AfterSet updates the webhook object upon setting a column
-func (w *Webhook) AfterSet(colName string, _ xorm.Cell) {
- var err error
- switch colName {
- case "events":
- w.HookEvent = &HookEvent{}
- if err = json.Unmarshal([]byte(w.Events), w.HookEvent); err != nil {
- log.Error(3, "Unmarshal[%d]: %v", w.ID, err)
- }
- case "created_unix":
- w.Created = time.Unix(w.CreatedUnix, 0).Local()
- case "updated_unix":
- w.Updated = time.Unix(w.UpdatedUnix, 0).Local()
+// AfterLoad updates the webhook object upon setting a column
+func (w *Webhook) AfterLoad() {
+ w.HookEvent = &HookEvent{}
+ if err := json.Unmarshal([]byte(w.Events), w.HookEvent); err != nil {
+ log.Error(3, "Unmarshal[%d]: %v", w.ID, err)
}
+
+ w.Created = time.Unix(w.CreatedUnix, 0).Local()
+ w.Updated = time.Unix(w.UpdatedUnix, 0).Local()
}
// GetSlackHook returns slack metadata
}
}
-// AfterSet updates the webhook object upon setting a column
-func (t *HookTask) AfterSet(colName string, _ xorm.Cell) {
- var err error
- switch colName {
- case "delivered":
- t.DeliveredString = time.Unix(0, t.Delivered).Format("2006-01-02 15:04:05 MST")
-
- case "request_content":
- if len(t.RequestContent) == 0 {
- return
- }
-
- t.RequestInfo = &HookRequest{}
- if err = json.Unmarshal([]byte(t.RequestContent), t.RequestInfo); err != nil {
- log.Error(3, "Unmarshal[%d]: %v", t.ID, err)
- }
+// AfterLoad updates the webhook object upon setting a column
+func (t *HookTask) AfterLoad() {
+ t.DeliveredString = time.Unix(0, t.Delivered).Format("2006-01-02 15:04:05 MST")
- case "response_content":
- if len(t.ResponseContent) == 0 {
- return
- }
+ if len(t.RequestContent) == 0 {
+ return
+ }
- t.ResponseInfo = &HookResponse{}
- if err = json.Unmarshal([]byte(t.ResponseContent), t.ResponseInfo); err != nil {
- log.Error(3, "Unmarshal [%d]: %v", t.ID, err)
- }
+ t.RequestInfo = &HookRequest{}
+ if err := json.Unmarshal([]byte(t.RequestContent), t.RequestInfo); err != nil {
+ log.Error(3, "Unmarshal[%d]: %v", t.ID, err)
}
}
return results, lastError
}
-// NowTime2 return current time
-func (engine *Engine) NowTime2(sqlTypeName string) (interface{}, time.Time) {
+// nowTime return current time
+func (engine *Engine) nowTime(col *core.Column) (interface{}, time.Time) {
t := time.Now()
- return engine.formatTime(sqlTypeName, t.In(engine.DatabaseTZ)), t.In(engine.TZLocation)
+ var tz = engine.DatabaseTZ
+ if !col.DisableTimeZone && col.TimeZone != nil {
+ tz = col.TimeZone
+ }
+ return engine.formatTime(col.SQLType.Name, t.In(tz)), t.In(engine.TZLocation)
}
func (engine *Engine) formatColTime(col *core.Column, t time.Time) (v interface{}) {
}
return builder.IsNull{colName}.Or(builder.Eq{colName: zeroTime1})
}
+
+// BufferSize sets buffer size for iterate
+func (engine *Engine) BufferSize(size int) *Session {
+ session := engine.NewSession()
+ session.isAutoClose = true
+ return session.BufferSize(size)
+}
if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime /*&& isZero(fieldValue.Interface())*/ {
// if time is non-empty, then set to auto time
- val, t := session.engine.NowTime2(col.SQLType.Name)
+ val, t := session.engine.nowTime(col)
args = append(args, val)
var colName = col.Name
AfterSet(string, Cell)
}
-// !nashtsai! TODO enable BeforeValidateProcessor when xorm start to support validations
-//// Executed before an object is validated
-//type BeforeValidateProcessor interface {
-// BeforeValidate()
-//}
-// --
-
// AfterInsertProcessor executed after an object is persisted to the database
type AfterInsertProcessor interface {
AfterInsert()
type AfterDeleteProcessor interface {
AfterDelete()
}
+
+// AfterLoadProcessor executed after an ojbect has been loaded from database
+type AfterLoadProcessor interface {
+ AfterLoad()
+}
+
+// AfterLoadSessionProcessor executed after an ojbect has been loaded from database with session parameter
+type AfterLoadSessionProcessor interface {
+ AfterLoad(*Session)
+}
+
+type executedProcessorFunc func(*Session, interface{}) error
+
+type executedProcessor struct {
+ fun executedProcessorFunc
+ session *Session
+ bean interface{}
+}
+
+func (executor *executedProcessor) execute() error {
+ return executor.fun(executor.session, executor.bean)
+}
+
+func (session *Session) executeProcessors() error {
+ processors := session.afterProcessors
+ session.afterProcessors = make([]executedProcessor, 0)
+ for _, processor := range processors {
+ if err := processor.execute(); err != nil {
+ return err
+ }
+ }
+ return nil
+}
return err
}
- scanResults, err := rows.session.row2Slice(rows.rows, rows.fields, len(rows.fields), bean)
+ scanResults, err := rows.session.row2Slice(rows.rows, rows.fields, bean)
if err != nil {
return err
}
- _, err = rows.session.slice2Bean(scanResults, rows.fields, len(rows.fields), bean, &dataStruct, rows.session.statement.RefTable)
- return err
+ _, err = rows.session.slice2Bean(scanResults, rows.fields, bean, &dataStruct, rows.session.statement.RefTable)
+ if err != nil {
+ return err
+ }
+
+ return rows.session.executeProcessors()
}
// Close session if session.IsAutoClose is true, and claimed any opened resources
beforeClosures []func(interface{})
afterClosures []func(interface{})
+ afterProcessors []executedProcessor
+
prepareStmt bool
stmtCache map[uint32]*core.Stmt //key: hash.Hash32 of (queryStr, len(queryStr))
session.beforeClosures = make([]func(interface{}), 0)
session.afterClosures = make([]func(interface{}), 0)
+ session.afterProcessors = make([]executedProcessor, 0)
+
session.lastSQL = ""
session.lastSQLArgs = []interface{}{}
}
// Cell cell is a result of one column field
type Cell *interface{}
-func (session *Session) rows2Beans(rows *core.Rows, fields []string, fieldsCount int,
+func (session *Session) rows2Beans(rows *core.Rows, fields []string,
table *core.Table, newElemFunc func([]string) reflect.Value,
sliceValueSetFunc func(*reflect.Value, core.PK) error) error {
for rows.Next() {
var newValue = newElemFunc(fields)
bean := newValue.Interface()
- dataStruct := rValue(bean)
+ dataStruct := newValue.Elem()
// handle beforeClosures
- scanResults, err := session.row2Slice(rows, fields, fieldsCount, bean)
+ scanResults, err := session.row2Slice(rows, fields, bean)
if err != nil {
return err
}
- pk, err := session.slice2Bean(scanResults, fields, fieldsCount, bean, &dataStruct, table)
- if err != nil {
- return err
- }
- err = sliceValueSetFunc(&newValue, pk)
+ pk, err := session.slice2Bean(scanResults, fields, bean, &dataStruct, table)
if err != nil {
return err
}
+ session.afterProcessors = append(session.afterProcessors, executedProcessor{
+ fun: func(*Session, interface{}) error {
+ return sliceValueSetFunc(&newValue, pk)
+ },
+ session: session,
+ bean: bean,
+ })
}
return nil
}
-func (session *Session) row2Slice(rows *core.Rows, fields []string, fieldsCount int, bean interface{}) ([]interface{}, error) {
+func (session *Session) row2Slice(rows *core.Rows, fields []string, bean interface{}) ([]interface{}, error) {
for _, closure := range session.beforeClosures {
closure(bean)
}
- scanResults := make([]interface{}, fieldsCount)
+ scanResults := make([]interface{}, len(fields))
for i := 0; i < len(fields); i++ {
var cell interface{}
scanResults[i] = &cell
return scanResults, nil
}
-func (session *Session) slice2Bean(scanResults []interface{}, fields []string, fieldsCount int, bean interface{}, dataStruct *reflect.Value, table *core.Table) (core.PK, error) {
+func (session *Session) slice2Bean(scanResults []interface{}, fields []string, bean interface{}, dataStruct *reflect.Value, table *core.Table) (core.PK, error) {
defer func() {
if b, hasAfterSet := bean.(AfterSetProcessor); hasAfterSet {
for ii, key := range fields {
b.AfterSet(key, Cell(scanResults[ii].(*interface{})))
}
}
-
- // handle afterClosures
- for _, closure := range session.afterClosures {
- closure(bean)
- }
}()
+ // handle afterClosures
+ for _, closure := range session.afterClosures {
+ session.afterProcessors = append(session.afterProcessors, executedProcessor{
+ fun: func(sess *Session, bean interface{}) error {
+ closure(bean)
+ return nil
+ },
+ session: session,
+ bean: bean,
+ })
+ }
+
+ if a, has := bean.(AfterLoadProcessor); has {
+ session.afterProcessors = append(session.afterProcessors, executedProcessor{
+ fun: func(sess *Session, bean interface{}) error {
+ a.AfterLoad()
+ return nil
+ },
+ session: session,
+ bean: bean,
+ })
+ }
+
+ if a, has := bean.(AfterLoadSessionProcessor); has {
+ session.afterProcessors = append(session.afterProcessors, executedProcessor{
+ fun: func(sess *Session, bean interface{}) error {
+ a.AfterLoad(sess)
+ return nil
+ },
+ session: session,
+ bean: bean,
+ })
+ }
+
var tempMap = make(map[string]int)
var pk core.PK
for ii, key := range fields {
}
}
- // !oinume! Insert NowTime to the head of session.statement.Params
+ // !oinume! Insert nowTime to the head of session.statement.Params
condArgs = append(condArgs, "")
paramsLen := len(condArgs)
copy(condArgs[1:paramsLen], condArgs[0:paramsLen-1])
- val, t := session.engine.NowTime2(deletedColumn.SQLType.Name)
+ val, t := session.engine.nowTime(deletedColumn)
condArgs[0] = val
var colName = deletedColumn.Name
if err != nil {
return err
}
- return session.rows2Beans(rows, fields, len(fields), tb, newElemFunc, containerValueSetFunc)
+ err = session.rows2Beans(rows, fields, tb, newElemFunc, containerValueSetFunc)
+ rows.Close()
+ if err != nil {
+ return err
+ }
+ return session.executeProcessors()
}
for rows.Next() {
return true, err
}
- scanResults, err := session.row2Slice(rows, fields, len(fields), bean)
+ scanResults, err := session.row2Slice(rows, fields, bean)
if err != nil {
return false, err
}
rows.Close()
dataStruct := rValue(bean)
- _, err = session.slice2Bean(scanResults, fields, len(fields), bean, &dataStruct, table)
+ _, err = session.slice2Bean(scanResults, fields, bean, &dataStruct, table)
+ if err != nil {
+ return true, err
+ }
+
+ return true, session.executeProcessors()
case reflect.Slice:
err = rows.ScanSlice(bean)
case reflect.Map:
}
}
if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime {
- val, t := session.engine.NowTime2(col.SQLType.Name)
+ val, t := session.engine.nowTime(col)
args = append(args, val)
var colName = col.Name
}
}
if (col.IsCreated || col.IsUpdated) && session.statement.UseAutoTime {
- val, t := session.engine.NowTime2(col.SQLType.Name)
+ val, t := session.engine.nowTime(col)
args = append(args, val)
var colName = col.Name
defer session.Close()
}
+ if session.statement.bufferSize > 0 {
+ return session.bufferIterate(bean, fun)
+ }
+
rows, err := session.Rows(bean)
if err != nil {
return err
}
return err
}
+
+// BufferSize sets the buffersize for iterate
+func (session *Session) BufferSize(size int) *Session {
+ session.statement.bufferSize = size
+ return session
+}
+
+func (session *Session) bufferIterate(bean interface{}, fun IterFunc) error {
+ if session.isAutoClose {
+ defer session.Close()
+ }
+
+ var bufferSize = session.statement.bufferSize
+ var limit = session.statement.LimitN
+ if limit > 0 && bufferSize > limit {
+ bufferSize = limit
+ }
+ var start = session.statement.Start
+ v := rValue(bean)
+ sliceType := reflect.SliceOf(v.Type())
+ var idx = 0
+ for {
+ slice := reflect.New(sliceType)
+ if err := session.Limit(bufferSize, start).find(slice.Interface(), bean); err != nil {
+ return err
+ }
+
+ for i := 0; i < slice.Elem().Len(); i++ {
+ if err := fun(idx, slice.Elem().Index(i).Addr().Interface()); err != nil {
+ return err
+ }
+ idx++
+ }
+
+ start = start + slice.Elem().Len()
+ if limit > 0 && idx+bufferSize > limit {
+ bufferSize = limit - idx
+ }
+
+ if bufferSize <= 0 || slice.Elem().Len() < bufferSize || idx == limit {
+ break
+ }
+ }
+
+ return nil
+}
if _, ok := session.statement.columnMap[strings.ToLower(table.Updated)]; !ok {
colNames = append(colNames, session.engine.Quote(table.Updated)+" = ?")
col := table.UpdatedColumn()
- val, t := session.engine.NowTime2(col.SQLType.Name)
+ val, t := session.engine.nowTime(col)
args = append(args, val)
var colName = col.Name
decrColumns map[string]decrParam
exprColumns map[string]exprParam
cond builder.Cond
+ bufferSize int
}
// Init reset all the statement's fields
statement.decrColumns = make(map[string]decrParam)
statement.exprColumns = make(map[string]exprParam)
statement.cond = builder.NewCond()
+ statement.bufferSize = 0
}
// NoAutoCondition if you do not want convert bean's field as query condition, then use this function
"revisionTime": "2016-08-11T02:11:45Z"
},
{
- "checksumSHA1": "lAzHeuH461JyawhsGLi27JpWsgs=",
+ "checksumSHA1": "+KmPfckyKvrUZPIHBYHylg/7V8o=",
"path": "github.com/go-xorm/xorm",
- "revision": "3101e3bc440f16f151687d97bce94da063c486f5",
- "revisionTime": "2017-09-15T01:51:15Z"
+ "revision": "29d4a0330a00b9be468b70e3fb0f74109348c358",
+ "revisionTime": "2017-09-30T01:26:13Z"
},
{
"checksumSHA1": "1ft/4j5MFa7C9dPI9whL03HSUzk=",