Skip to content

Commit d710af6

Browse files
authored
Remove NewSession method from db.Engine interface (#17577)
* Remove NewSession method from db.Engine interface * Fix bug * Some improvements * Fix bug * Fix test * Use XXXBean instead of XXXExample
1 parent 0add627 commit d710af6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+550
-570
lines changed

models/branches.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -614,12 +614,13 @@ func FindRenamedBranch(repoID int64, from string) (branch *RenamedBranch, exist
614614

615615
// RenameBranch rename a branch
616616
func (repo *Repository) RenameBranch(from, to string, gitAction func(isDefault bool) error) (err error) {
617-
sess := db.NewSession(db.DefaultContext)
618-
defer sess.Close()
619-
if err := sess.Begin(); err != nil {
617+
ctx, committer, err := db.TxContext()
618+
if err != nil {
620619
return err
621620
}
621+
defer committer.Close()
622622

623+
sess := db.GetEngine(ctx)
623624
// 1. update default branch if needed
624625
isDefault := repo.DefaultBranch == from
625626
if isDefault {
@@ -663,10 +664,10 @@ func (repo *Repository) RenameBranch(from, to string, gitAction func(isDefault b
663664
From: from,
664665
To: to,
665666
}
666-
_, err = sess.Insert(renamedBranch)
667+
err = db.Insert(ctx, renamedBranch)
667668
if err != nil {
668669
return err
669670
}
670671

671-
return sess.Commit()
672+
return committer.Commit()
672673
}

models/db/context.go

+26-29
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ package db
66

77
import (
88
"context"
9+
"database/sql"
910

1011
"code.gitea.io/gitea/modules/setting"
1112

1213
"xorm.io/builder"
13-
"xorm.io/xorm"
1414
)
1515

1616
// DefaultContext is the default context to run xorm queries in
@@ -44,15 +44,6 @@ func (ctx *Context) Engine() Engine {
4444
return ctx.e
4545
}
4646

47-
// NewSession returns a new session
48-
func (ctx *Context) NewSession() *xorm.Session {
49-
e, ok := ctx.e.(*xorm.Engine)
50-
if ok {
51-
return e.NewSession()
52-
}
53-
return nil
54-
}
55-
5647
// Value shadows Value for context.Context but allows us to get ourselves and an Engined object
5748
func (ctx *Context) Value(key interface{}) interface{} {
5849
if key == EnginedContextKey {
@@ -64,7 +55,6 @@ func (ctx *Context) Value(key interface{}) interface{} {
6455
// Engined structs provide an Engine
6556
type Engined interface {
6657
Engine() Engine
67-
NewSession() *xorm.Session
6858
}
6959

7060
// GetEngine will get a db Engine from this context or return an Engine restricted to this context
@@ -79,24 +69,6 @@ func GetEngine(ctx context.Context) Engine {
7969
return x.Context(ctx)
8070
}
8171

82-
// NewSession will get a db Session from this context or return a session restricted to this context
83-
func NewSession(ctx context.Context) *xorm.Session {
84-
if engined, ok := ctx.(Engined); ok {
85-
return engined.NewSession()
86-
}
87-
88-
enginedInterface := ctx.Value(EnginedContextKey)
89-
if enginedInterface != nil {
90-
sess := enginedInterface.(Engined).NewSession()
91-
if sess != nil {
92-
return sess.Context(ctx)
93-
}
94-
return nil
95-
}
96-
97-
return x.NewSession().Context(ctx)
98-
}
99-
10072
// Committer represents an interface to Commit or Close the Context
10173
type Committer interface {
10274
Commit() error
@@ -155,3 +127,28 @@ func Insert(ctx context.Context, beans ...interface{}) error {
155127
_, err := GetEngine(ctx).Insert(beans...)
156128
return err
157129
}
130+
131+
// Exec executes a sql with args
132+
func Exec(ctx context.Context, sqlAndArgs ...interface{}) (sql.Result, error) {
133+
return GetEngine(ctx).Exec(sqlAndArgs...)
134+
}
135+
136+
// GetByBean filled empty fields of the bean according non-empty fields to query in database.
137+
func GetByBean(ctx context.Context, bean interface{}) (bool, error) {
138+
return GetEngine(ctx).Get(bean)
139+
}
140+
141+
// DeleteByBean deletes all records according non-empty fields of the bean as conditions.
142+
func DeleteByBean(ctx context.Context, bean interface{}) (int64, error) {
143+
return GetEngine(ctx).Delete(bean)
144+
}
145+
146+
// CountByBean counts the number of database records according non-empty fields of the bean as conditions.
147+
func CountByBean(ctx context.Context, bean interface{}) (int64, error) {
148+
return GetEngine(ctx).Count(bean)
149+
}
150+
151+
// TableName returns the table name according a bean object
152+
func TableName(bean interface{}) string {
153+
return x.TableName(bean)
154+
}

models/db/engine.go

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ type Engine interface {
5555
Asc(colNames ...string) *xorm.Session
5656
Desc(colNames ...string) *xorm.Session
5757
Limit(limit int, start ...int) *xorm.Session
58+
NoAutoTime() *xorm.Session
5859
SumInt(bean interface{}, columnName string) (res int64, err error)
5960
Sync2(...interface{}) error
6061
Select(string) *xorm.Session

models/db/list_options.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func GetPaginatedSession(p Paginator) *xorm.Session {
2424
}
2525

2626
// SetSessionPagination sets pagination for a database session
27-
func SetSessionPagination(sess *xorm.Session, p Paginator) *xorm.Session {
27+
func SetSessionPagination(sess Engine, p Paginator) *xorm.Session {
2828
skip, take := p.GetSkipTake()
2929

3030
return sess.Limit(take, skip)

models/issue.go

+8-13
Original file line numberDiff line numberDiff line change
@@ -1349,10 +1349,9 @@ func applyReviewRequestedCondition(sess *xorm.Session, reviewRequestedID int64)
13491349

13501350
// CountIssuesByRepo map from repoID to number of issues matching the options
13511351
func CountIssuesByRepo(opts *IssuesOptions) (map[int64]int64, error) {
1352-
sess := db.NewSession(db.DefaultContext)
1353-
defer sess.Close()
1352+
e := db.GetEngine(db.DefaultContext)
13541353

1355-
sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
1354+
sess := e.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
13561355

13571356
opts.setupSession(sess)
13581357

@@ -1377,10 +1376,9 @@ func CountIssuesByRepo(opts *IssuesOptions) (map[int64]int64, error) {
13771376
// GetRepoIDsForIssuesOptions find all repo ids for the given options
13781377
func GetRepoIDsForIssuesOptions(opts *IssuesOptions, user *User) ([]int64, error) {
13791378
repoIDs := make([]int64, 0, 5)
1380-
sess := db.NewSession(db.DefaultContext)
1381-
defer sess.Close()
1379+
e := db.GetEngine(db.DefaultContext)
13821380

1383-
sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
1381+
sess := e.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
13841382

13851383
opts.setupSession(sess)
13861384

@@ -1397,10 +1395,9 @@ func GetRepoIDsForIssuesOptions(opts *IssuesOptions, user *User) ([]int64, error
13971395

13981396
// Issues returns a list of issues by given conditions.
13991397
func Issues(opts *IssuesOptions) ([]*Issue, error) {
1400-
sess := db.NewSession(db.DefaultContext)
1401-
defer sess.Close()
1398+
e := db.GetEngine(db.DefaultContext)
14021399

1403-
sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
1400+
sess := e.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
14041401
opts.setupSession(sess)
14051402
sortIssuesSession(sess, opts.SortType, opts.PriorityRepoID)
14061403

@@ -1419,15 +1416,14 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) {
14191416

14201417
// CountIssues number return of issues by given conditions.
14211418
func CountIssues(opts *IssuesOptions) (int64, error) {
1422-
sess := db.NewSession(db.DefaultContext)
1423-
defer sess.Close()
1419+
e := db.GetEngine(db.DefaultContext)
14241420

14251421
countsSlice := make([]*struct {
14261422
RepoID int64
14271423
Count int64
14281424
}, 0, 1)
14291425

1430-
sess.Select("COUNT(issue.id) AS count").Table("issue")
1426+
sess := e.Select("COUNT(issue.id) AS count").Table("issue")
14311427
sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id")
14321428
opts.setupSession(sess)
14331429
if err := sess.Find(&countsSlice); err != nil {
@@ -1901,7 +1897,6 @@ func UpdateIssueDeadline(issue *Issue, deadlineUnix timeutil.TimeStamp, doer *Us
19011897
if issue.DeadlineUnix == deadlineUnix {
19021898
return nil
19031899
}
1904-
19051900
ctx, committer, err := db.TxContext()
19061901
if err != nil {
19071902
return err

models/issue_comment.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -1098,17 +1098,17 @@ func UpdateComment(c *Comment, doer *User) error {
10981098

10991099
// DeleteComment deletes the comment
11001100
func DeleteComment(comment *Comment) error {
1101-
sess := db.NewSession(db.DefaultContext)
1102-
defer sess.Close()
1103-
if err := sess.Begin(); err != nil {
1101+
ctx, committer, err := db.TxContext()
1102+
if err != nil {
11041103
return err
11051104
}
1105+
defer committer.Close()
11061106

1107-
if err := deleteComment(sess, comment); err != nil {
1107+
if err := deleteComment(db.GetEngine(ctx), comment); err != nil {
11081108
return err
11091109
}
11101110

1111-
return sess.Commit()
1111+
return committer.Commit()
11121112
}
11131113

11141114
func deleteComment(e db.Engine, comment *Comment) error {

models/issue_dependency.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func CreateIssueDependency(user *User, issue, dep *Issue) error {
6161
return ErrCircularDependency{issue.ID, dep.ID}
6262
}
6363

64-
if _, err := sess.Insert(&IssueDependency{
64+
if err := db.Insert(ctx, &IssueDependency{
6565
UserID: user.ID,
6666
IssueID: issue.ID,
6767
DependencyID: dep.ID,

models/issue_label.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -297,11 +297,13 @@ func DeleteLabel(id, labelID int64) error {
297297
return err
298298
}
299299

300-
sess := db.NewSession(db.DefaultContext)
301-
defer sess.Close()
302-
if err = sess.Begin(); err != nil {
300+
ctx, committer, err := db.TxContext()
301+
if err != nil {
303302
return err
304303
}
304+
defer committer.Close()
305+
306+
sess := db.GetEngine(ctx)
305307

306308
if label.BelongsToOrg() && label.OrgID != id {
307309
return nil
@@ -323,7 +325,7 @@ func DeleteLabel(id, labelID int64) error {
323325
return err
324326
}
325327

326-
return sess.Commit()
328+
return committer.Commit()
327329
}
328330

329331
// getLabelByID returns a label by label id

models/issue_milestone.go

+30-24
Original file line numberDiff line numberDiff line change
@@ -85,22 +85,22 @@ func (m *Milestone) State() api.StateType {
8585

8686
// NewMilestone creates new milestone of repository.
8787
func NewMilestone(m *Milestone) (err error) {
88-
sess := db.NewSession(db.DefaultContext)
89-
defer sess.Close()
90-
if err = sess.Begin(); err != nil {
88+
ctx, committer, err := db.TxContext()
89+
if err != nil {
9190
return err
9291
}
92+
defer committer.Close()
9393

9494
m.Name = strings.TrimSpace(m.Name)
9595

96-
if _, err = sess.Insert(m); err != nil {
96+
if err = db.Insert(ctx, m); err != nil {
9797
return err
9898
}
9999

100-
if _, err = sess.Exec("UPDATE `repository` SET num_milestones = num_milestones + 1 WHERE id = ?", m.RepoID); err != nil {
100+
if _, err = db.Exec(ctx, "UPDATE `repository` SET num_milestones = num_milestones + 1 WHERE id = ?", m.RepoID); err != nil {
101101
return err
102102
}
103-
return sess.Commit()
103+
return committer.Commit()
104104
}
105105

106106
func getMilestoneByRepoID(e db.Engine, repoID, id int64) (*Milestone, error) {
@@ -150,11 +150,13 @@ func getMilestoneByID(e db.Engine, id int64) (*Milestone, error) {
150150

151151
// UpdateMilestone updates information of given milestone.
152152
func UpdateMilestone(m *Milestone, oldIsClosed bool) error {
153-
sess := db.NewSession(db.DefaultContext)
154-
defer sess.Close()
155-
if err := sess.Begin(); err != nil {
153+
ctx, committer, err := db.TxContext()
154+
if err != nil {
156155
return err
157156
}
157+
defer committer.Close()
158+
159+
sess := db.GetEngine(ctx)
158160

159161
if m.IsClosed && !oldIsClosed {
160162
m.ClosedDateUnix = timeutil.TimeStampNow()
@@ -171,7 +173,7 @@ func UpdateMilestone(m *Milestone, oldIsClosed bool) error {
171173
}
172174
}
173175

174-
return sess.Commit()
176+
return committer.Commit()
175177
}
176178

177179
func updateMilestone(e db.Engine, m *Milestone) error {
@@ -207,11 +209,13 @@ func updateMilestoneCounters(e db.Engine, id int64) error {
207209

208210
// ChangeMilestoneStatusByRepoIDAndID changes a milestone open/closed status if the milestone ID is in the repo.
209211
func ChangeMilestoneStatusByRepoIDAndID(repoID, milestoneID int64, isClosed bool) error {
210-
sess := db.NewSession(db.DefaultContext)
211-
defer sess.Close()
212-
if err := sess.Begin(); err != nil {
212+
ctx, committer, err := db.TxContext()
213+
if err != nil {
213214
return err
214215
}
216+
defer committer.Close()
217+
218+
sess := db.GetEngine(ctx)
215219

216220
m := &Milestone{
217221
ID: milestoneID,
@@ -229,22 +233,22 @@ func ChangeMilestoneStatusByRepoIDAndID(repoID, milestoneID int64, isClosed bool
229233
return err
230234
}
231235

232-
return sess.Commit()
236+
return committer.Commit()
233237
}
234238

235239
// ChangeMilestoneStatus changes the milestone open/closed status.
236240
func ChangeMilestoneStatus(m *Milestone, isClosed bool) (err error) {
237-
sess := db.NewSession(db.DefaultContext)
238-
defer sess.Close()
239-
if err = sess.Begin(); err != nil {
241+
ctx, committer, err := db.TxContext()
242+
if err != nil {
240243
return err
241244
}
245+
defer committer.Close()
242246

243-
if err := changeMilestoneStatus(sess, m, isClosed); err != nil {
247+
if err := changeMilestoneStatus(db.GetEngine(ctx), m, isClosed); err != nil {
244248
return err
245249
}
246250

247-
return sess.Commit()
251+
return committer.Commit()
248252
}
249253

250254
func changeMilestoneStatus(e db.Engine, m *Milestone, isClosed bool) error {
@@ -335,11 +339,13 @@ func DeleteMilestoneByRepoID(repoID, id int64) error {
335339
return err
336340
}
337341

338-
sess := db.NewSession(db.DefaultContext)
339-
defer sess.Close()
340-
if err = sess.Begin(); err != nil {
342+
ctx, committer, err := db.TxContext()
343+
if err != nil {
341344
return err
342345
}
346+
defer committer.Close()
347+
348+
sess := db.GetEngine(ctx)
343349

344350
if _, err = sess.ID(m.ID).Delete(new(Milestone)); err != nil {
345351
return err
@@ -360,10 +366,10 @@ func DeleteMilestoneByRepoID(repoID, id int64) error {
360366
return err
361367
}
362368

363-
if _, err = sess.Exec("UPDATE `issue` SET milestone_id = 0 WHERE milestone_id = ?", m.ID); err != nil {
369+
if _, err = db.Exec(ctx, "UPDATE `issue` SET milestone_id = 0 WHERE milestone_id = ?", m.ID); err != nil {
364370
return err
365371
}
366-
return sess.Commit()
372+
return committer.Commit()
367373
}
368374

369375
// MilestoneList is a list of milestones offering additional functionality

0 commit comments

Comments
 (0)