@@ -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 {
299307func buildOracleParam (i int ) string {
300308 return ":val" + strconv .Itoa (i )
301309}
310+ func buildMsSqlParam (i int ) string {
311+ return "@p" + strconv .Itoa (i )
312+ }
302313func 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}
316329func 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