Skip to content

Commit 7821c27

Browse files
committed
query with context
1 parent 4c74f1a commit 7821c27

File tree

7 files changed

+61
-93
lines changed

7 files changed

+61
-93
lines changed

orm/query.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package orm
22

33
import (
4+
"context"
45
"database/sql"
56
"errors"
67
"math/rand"
@@ -15,6 +16,7 @@ type Raw string
1516
type Query[T Table] struct {
1617
writeAndReadDbs []*sql.DB //first element as write db, rest as read dbs
1718
tx *sql.Tx
19+
ctx *context.Context
1820
tables []*queryTable
1921
wheres []where
2022
result QueryResult

orm/query_delete.go

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package orm
22

3-
import (
4-
"database/sql"
5-
)
6-
73
func (m Query[T]) Delete(primaryIds ...interface{}) QueryResult {
84
if len(m.tables) == 0 {
95
m.setErr(ErrTableNotSelected)
@@ -38,27 +34,8 @@ func (m Query[T]) delete() QueryResult {
3834
rawSql += " " + orderLimitOffsetStr
3935
}
4036

41-
m.result.PrepareSql = rawSql
42-
m.result.Bindings = bindings
43-
44-
if m.result.Err != nil {
45-
return m.result
46-
}
47-
48-
var res sql.Result
49-
var err error
50-
if m.dbTx() != nil {
51-
res, err = m.dbTx().Exec(rawSql, bindings...)
52-
} else {
53-
res, err = m.DB().Exec(rawSql, bindings...)
54-
}
55-
56-
if err != nil {
57-
m.result.Err = err
58-
} else if res != nil {
59-
m.result.LastInsertId, m.result.Err = res.LastInsertId()
60-
m.result.RowsAffected, m.result.Err = res.RowsAffected()
61-
}
37+
m.prepareSql = rawSql
38+
m.bindings = bindings
6239

63-
return m.result
40+
return m.Execute()
6441
}

orm/query_execute.go

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,42 @@
11
package orm
22

33
import (
4-
"database/sql"
4+
"database/sql"
55
)
66

77
//excute raw
88
func (m Query[T]) Execute() QueryResult {
9-
if m.prepareSql == "" {
10-
m.setErr(ErrRawSqlRequired)
11-
}
12-
if m.result.Err != nil {
13-
return m.result
14-
}
9+
if m.prepareSql == "" {
10+
m.setErr(ErrRawSqlRequired)
11+
}
12+
if m.result.Err != nil {
13+
return m.result
14+
}
1515

16-
m.result.PrepareSql = m.prepareSql
17-
m.result.Bindings = m.bindings
16+
m.result.PrepareSql = m.prepareSql
17+
m.result.Bindings = m.bindings
1818

19-
var res sql.Result
20-
var err error
21-
if m.dbTx() != nil {
22-
res, err = m.dbTx().Exec(m.prepareSql, m.bindings...)
23-
} else {
24-
res, err = m.DB().Exec(m.prepareSql, m.bindings...)
25-
}
19+
var res sql.Result
20+
var err error
21+
if m.dbTx() != nil {
22+
if m.ctx != nil {
23+
res, err = m.dbTx().ExecContext(*m.ctx, m.prepareSql, m.bindings...)
24+
} else {
25+
res, err = m.dbTx().Exec(m.prepareSql, m.bindings...)
26+
}
27+
} else {
28+
if m.ctx != nil {
29+
res, err = m.DB().ExecContext(*m.ctx, m.prepareSql, m.bindings...)
30+
} else {
31+
res, err = m.DB().Exec(m.prepareSql, m.bindings...)
32+
}
33+
}
2634

27-
if err != nil {
28-
m.result.Err = err
29-
} else if res != nil {
30-
m.result.LastInsertId, m.result.Err = res.LastInsertId()
31-
m.result.RowsAffected, m.result.Err = res.RowsAffected()
32-
}
33-
34-
return m.result
35+
if err != nil {
36+
m.result.Err = err
37+
} else if res != nil {
38+
m.result.LastInsertId, m.result.Err = res.LastInsertId()
39+
m.result.RowsAffected, m.result.Err = res.RowsAffected()
40+
}
41+
return m.result
3542
}

orm/query_get.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,17 @@ func (m Query[T]) GetTo(destPtr interface{}) QueryResult {
8282
var rows *sql.Rows
8383
var err error
8484
if m.dbTx() != nil {
85-
rows, err = m.dbTx().Query(tempTable.raw, tempTable.bindings...)
85+
if m.ctx != nil {
86+
rows, err = m.dbTx().QueryContext(*m.ctx, tempTable.raw, tempTable.bindings...)
87+
} else {
88+
rows, err = m.dbTx().Query(tempTable.raw, tempTable.bindings...)
89+
}
8690
} else {
87-
rows, err = m.readDB().Query(tempTable.raw, tempTable.bindings...)
91+
if m.ctx != nil {
92+
rows, err = m.readDB().QueryContext(*m.ctx, tempTable.raw, tempTable.bindings...)
93+
} else {
94+
rows, err = m.readDB().Query(tempTable.raw, tempTable.bindings...)
95+
}
8896
}
8997

9098
defer func() {

orm/query_insert.go

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package orm
22

33
import (
4-
"database/sql"
54
"errors"
65
"reflect"
76
"strings"
@@ -172,22 +171,9 @@ func (m Query[T]) insert(ignore bool, data interface{}, tableFieldPtrs []interfa
172171
}
173172

174173
rawSql += ";"
175-
m.result.PrepareSql = rawSql
176-
m.result.Bindings = bindings
177174

178-
var insertRes sql.Result
179-
if m.dbTx() != nil {
180-
insertRes, err = m.dbTx().Exec(rawSql, bindings...)
181-
} else {
182-
insertRes, err = m.DB().Exec(rawSql, bindings...)
183-
}
175+
m.prepareSql = rawSql
176+
m.bindings = bindings
184177

185-
m.setErr(err)
186-
if insertRes != nil {
187-
m.result.LastInsertId, err = insertRes.LastInsertId()
188-
m.setErr(err)
189-
m.result.RowsAffected, err = insertRes.RowsAffected()
190-
m.setErr(err)
191-
}
192-
return m.result
178+
return m.Execute()
193179
}

orm/query_update.go

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package orm
22

33
import (
4-
"database/sql"
54
"reflect"
65
"strings"
76
)
@@ -36,29 +35,10 @@ func (m Query[T]) Updates(updates ...UpdateColumn) QueryResult {
3635
rawSql += " " + orderAndLimitStr
3736
}
3837

39-
m.result.PrepareSql = rawSql
40-
m.result.Bindings = bindings
38+
m.prepareSql = rawSql
39+
m.bindings = bindings
4140

42-
if m.result.Err != nil {
43-
return m.result
44-
}
45-
46-
var res sql.Result
47-
var err error
48-
if m.dbTx() != nil {
49-
res, err = m.dbTx().Exec(rawSql, bindings...)
50-
} else {
51-
res, err = m.DB().Exec(rawSql, bindings...)
52-
}
53-
54-
if err != nil {
55-
m.result.Err = err
56-
} else if res != nil {
57-
m.result.LastInsertId, m.result.Err = res.LastInsertId()
58-
m.result.RowsAffected, m.result.Err = res.RowsAffected()
59-
}
60-
61-
return m.result
41+
return m.Execute()
6242
}
6343

6444
func (m Query[T]) generateUpdateStr(updates []UpdateColumn, bindings *[]interface{}) string {

orm/query_with.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package orm
22

3-
import "strings"
3+
import (
4+
"context"
5+
"strings"
6+
)
47

58
func (m Query[T]) WithParentsOnColumn(pidColumn interface{}) Query[T] {
69
tempName := m.TableInterface().TableName() + "_cte"
@@ -66,3 +69,8 @@ func (m Query[T]) withCte(subquery SubQuery, cteName string, recursive bool, col
6669
m.withCtes = append(m.withCtes, subquery)
6770
return m
6871
}
72+
73+
func (m Query[T]) WithContext(ctx context.Context) Query[T] {
74+
m.ctx = &ctx
75+
return m
76+
}

0 commit comments

Comments
 (0)