Skip to content

Commit 8098569

Browse files
committed
Refactor driver
1 parent 785d8e0 commit 8098569

File tree

1 file changed

+29
-11
lines changed

1 file changed

+29
-11
lines changed

code.go

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const (
1515
DriverMysql = "mysql"
1616
DriverMssql = "mssql"
1717
DriverOracle = "oracle"
18+
DriverSqlite3 = "sqlite3"
1819
DriverNotSupport = "no support"
1920
)
2021

@@ -54,7 +55,7 @@ type DynamicSqlCodeLoader struct {
5455
Map func(string) string
5556
}
5657

57-
func NewDefaultDynamicSqlCodeLoader(db *sql.DB, query string, options...int) *DynamicSqlCodeLoader {
58+
func NewDefaultDynamicSqlCodeLoader(db *sql.DB, query string, options ...int) *DynamicSqlCodeLoader {
5859
var parameterCount int
5960
if len(options) >= 1 && options[0] > 0 {
6061
parameterCount = options[0]
@@ -63,7 +64,7 @@ func NewDefaultDynamicSqlCodeLoader(db *sql.DB, query string, options...int) *Dy
6364
}
6465
return NewDynamicSqlCodeLoader(db, query, parameterCount, true)
6566
}
66-
func NewDynamicSqlCodeLoader(db *sql.DB, query string, parameterCount int, options...bool) *DynamicSqlCodeLoader {
67+
func NewDynamicSqlCodeLoader(db *sql.DB, query string, parameterCount int, options ...bool) *DynamicSqlCodeLoader {
6768
driver := getDriver(db)
6869
var mp func(string) string
6970
if driver == DriverOracle {
@@ -79,12 +80,14 @@ func NewDynamicSqlCodeLoader(db *sql.DB, query string, parameterCount int, optio
7980
handleDriver = true
8081
}
8182
if handleDriver {
82-
if driver == DriverOracle || driver == DriverPostgres {
83+
if driver == DriverOracle || driver == DriverPostgres || driver == DriverMssql {
8384
var x string
8485
if driver == DriverOracle {
8586
x = ":val"
86-
} else {
87+
} else if driver == DriverPostgres {
8788
x = "$"
89+
} else if driver == DriverMssql {
90+
x = "@p"
8891
}
8992
for i := 0; i < parameterCount; i++ {
9093
count := i + 1
@@ -103,7 +106,7 @@ func (l DynamicSqlCodeLoader) Load(ctx context.Context, master string) ([]CodeMo
103106
params = append(params, master)
104107
}
105108
}
106-
rows, er1 := l.DB.Query(l.Query, params...)
109+
rows, er1 := l.DB.QueryContext(ctx, l.Query, params...)
107110
if er1 != nil {
108111
return models, er1
109112
}
@@ -130,10 +133,15 @@ func (l DynamicSqlCodeLoader) Load(ctx context.Context, master string) ([]CodeMo
130133
}
131134
return models, nil
132135
}
133-
func NewSqlCodeLoader(db *sql.DB, table string, config CodeConfig) *SqlCodeLoader {
134-
build := getBuild(db)
136+
func NewSqlCodeLoader(db *sql.DB, table string, config CodeConfig, options...func(i int) string) *SqlCodeLoader {
137+
var build func(i int) string
138+
if len(options) > 0 && options[0] != nil {
139+
build = options[0]
140+
} else {
141+
build = getBuild(db)
142+
}
135143
driver := getDriver(db)
136-
var mp func(string)string
144+
var mp func(string) string
137145
if driver == DriverOracle {
138146
mp = strings.ToUpper
139147
}
@@ -200,7 +208,7 @@ func (l SqlCodeLoader) Load(ctx context.Context, master string) ([]CodeModel, er
200208
}
201209
}
202210
if len(sql2) > 0 {
203-
rows, err1 := l.DB.Query(sql2, values...)
211+
rows, err1 := l.DB.QueryContext(ctx, sql2, values...)
204212
if err1 != nil {
205213
return nil, err1
206214
}
@@ -299,6 +307,9 @@ func buildParam(i int) string {
299307
func buildOracleParam(i int) string {
300308
return ":val" + strconv.Itoa(i)
301309
}
310+
func buildMsSqlParam(i int) string {
311+
return "@p" + strconv.Itoa(i)
312+
}
302313
func buildDollarParam(i int) string {
303314
return "$" + strconv.Itoa(i)
304315
}
@@ -309,21 +320,28 @@ func getBuild(db *sql.DB) func(i int) string {
309320
return buildDollarParam
310321
case "*godror.drv":
311322
return buildOracleParam
323+
case "*mysql.MySQLDriver":
324+
return buildMsSqlParam
312325
default:
313326
return buildParam
314327
}
315328
}
316329
func getDriver(db *sql.DB) string {
330+
if db == nil {
331+
return DriverNotSupport
332+
}
317333
driver := reflect.TypeOf(db.Driver()).String()
318334
switch driver {
319335
case "*pq.Driver":
320336
return DriverPostgres
337+
case "*godror.drv":
338+
return DriverOracle
321339
case "*mysql.MySQLDriver":
322340
return DriverMysql
323341
case "*mssql.Driver":
324342
return DriverMssql
325-
case "*godror.drv":
326-
return DriverOracle
343+
case "*sqlite3.SQLiteDriver":
344+
return DriverSqlite3
327345
default:
328346
return DriverNotSupport
329347
}

0 commit comments

Comments
 (0)