@@ -54,12 +54,12 @@ type DynamicSqlCodeLoader struct {
5454}
5555
5656func NewDefaultDynamicSqlCodeLoader (db * sql.DB , query string ) * DynamicSqlCodeLoader {
57- driver := GetDriver (db )
57+ driver := getDriver (db )
5858 return & DynamicSqlCodeLoader {DB : db , Query : query , ParameterCount : 0 , Driver : driver }
5959 return NewDynamicSqlCodeLoader (db , query , 0 , true )
6060}
6161func NewDynamicSqlCodeLoader (db * sql.DB , query string , parameterCount int , handleDriver bool ) * DynamicSqlCodeLoader {
62- driver := GetDriver (db )
62+ driver := getDriver (db )
6363 if parameterCount <= 0 {
6464 parameterCount = 1
6565 }
@@ -101,11 +101,11 @@ func (l DynamicSqlCodeLoader) Load(ctx context.Context, master string) ([]CodeMo
101101 // get list indexes column
102102 modelTypes := reflect .TypeOf (models ).Elem ()
103103 modelType := reflect .TypeOf (CodeModel {})
104- indexes , er3 := GetColumnIndexes (modelType , columns , driver )
104+ indexes , er3 := getColumnIndexes (modelType , columns , driver )
105105 if er3 != nil {
106106 return models , er3
107107 }
108- tb , er4 := ScanType (rows , modelTypes , indexes )
108+ tb , er4 := scanType (rows , modelTypes , indexes )
109109 if er4 != nil {
110110 return models , er4
111111 }
@@ -117,9 +117,19 @@ func (l DynamicSqlCodeLoader) Load(ctx context.Context, master string) ([]CodeMo
117117 return models , nil
118118}
119119func NewSqlCodeLoader (db * sql.DB , table string , config CodeConfig ) * SqlCodeLoader {
120- driver := GetDriver (db )
120+ driver := getDriver (db )
121121 return & SqlCodeLoader {DB : db , Table : table , Config : config , Driver : driver }
122122}
123+
124+ func buildParam (i int ) string {
125+ return "?"
126+ }
127+ func buildOracleParam (i int ) string {
128+ return ":val" + strconv .Itoa (i )
129+ }
130+ func buildDollarParam (i int ) string {
131+ return "$" + strconv .Itoa (i )
132+ }
123133func (l SqlCodeLoader ) Load (ctx context.Context , master string ) ([]CodeModel , error ) {
124134 models := make ([]CodeModel , 0 )
125135 s := make ([]string , 0 )
@@ -154,14 +164,14 @@ func (l SqlCodeLoader) Load(ctx context.Context, master string) ([]CodeModel, er
154164 p1 := ""
155165 i := 1
156166 if len (c .Master ) > 0 {
157- i = i + 1
158167 if l .Driver == DriverPostgres {
159- p1 = fmt .Sprintf ("%s = $1 " , c .Master )
168+ p1 = fmt .Sprintf ("%s = $%d " , c .Master , i )
160169 } else if l .Driver == DriverOracle {
161- p1 = fmt .Sprintf ("%s = :val1 " , c .Master )
170+ p1 = fmt .Sprintf ("%s = :val%d " , c .Master , i )
162171 } else {
163172 p1 = fmt .Sprintf ("%s = ?" , c .Master )
164173 }
174+ i = i + 1
165175 values = append (values , master )
166176 }
167177 cols := strings .Join (s , "," )
@@ -170,7 +180,7 @@ func (l SqlCodeLoader) Load(ctx context.Context, master string) ([]CodeModel, er
170180 if l .Driver == DriverPostgres {
171181 p2 = fmt .Sprintf ("%s = $%d" , c .Status , i )
172182 } else if l .Driver == DriverOracle {
173- p1 = fmt .Sprintf ("%s = :val%d" , c .Status , i )
183+ p2 = fmt .Sprintf ("%s = :val%d" , c .Status , i )
174184 } else {
175185 p2 = fmt .Sprintf ("%s = ?" , c .Status )
176186 }
@@ -194,18 +204,6 @@ func (l SqlCodeLoader) Load(ctx context.Context, master string) ([]CodeModel, er
194204 }
195205 }
196206 if len (sql2 ) > 0 {
197- if l .Driver == DriverOracle || l .Driver == DriverPostgres {
198- var x string
199- if l .Driver == DriverOracle {
200- x = ":val"
201- } else {
202- x = "$"
203- }
204- for i := 0 ; i < len (values ); i ++ {
205- count := i + 1
206- sql2 = strings .Replace (sql2 , "?" , x + strconv .Itoa (count ), 1 )
207- }
208- }
209207 rows , err1 := l .DB .Query (sql2 , values ... )
210208 if err1 != nil {
211209 return nil , err1
@@ -218,11 +216,11 @@ func (l SqlCodeLoader) Load(ctx context.Context, master string) ([]CodeModel, er
218216 // get list indexes column
219217 modelTypes := reflect .TypeOf (models ).Elem ()
220218 modelType := reflect .TypeOf (CodeModel {})
221- indexes , er2 := GetColumnIndexes (modelType , columns , GetDriver (l .DB ))
219+ indexes , er2 := getColumnIndexes (modelType , columns , getDriver (l .DB ))
222220 if er2 != nil {
223221 return nil , er2
224222 }
225- tb , er3 := ScanType (rows , modelTypes , indexes )
223+ tb , er3 := scanType (rows , modelTypes , indexes )
226224 if er3 != nil {
227225 return nil , er3
228226 }
@@ -236,7 +234,7 @@ func (l SqlCodeLoader) Load(ctx context.Context, master string) ([]CodeModel, er
236234}
237235
238236// StructScan : transfer struct to slice for scan
239- func StructScan (s interface {}, indexColumns []int ) (r []interface {}) {
237+ func structScan (s interface {}, indexColumns []int ) (r []interface {}) {
240238 if s != nil {
241239 maps := reflect .Indirect (reflect .ValueOf (s ))
242240 for _ , index := range indexColumns {
@@ -245,15 +243,14 @@ func StructScan(s interface{}, indexColumns []int) (r []interface{}) {
245243 }
246244 return
247245}
248-
249- func GetColumnIndexes (modelType reflect.Type , columnsName []string , driver string ) (indexes []int , err error ) {
246+ func getColumnIndexes (modelType reflect.Type , columnsName []string , driver string ) (indexes []int , err error ) {
250247 if modelType .Kind () != reflect .Struct {
251248 return nil , errors .New ("bad type" )
252249 }
253250 for i := 0 ; i < modelType .NumField (); i ++ {
254251 field := modelType .Field (i )
255252 ormTag := field .Tag .Get ("gorm" )
256- column , ok := FindTag (ormTag , "column" )
253+ column , ok := findTag (ormTag , "column" )
257254 if driver == DriverOracle {
258255 column = strings .ToUpper (column )
259256 }
@@ -266,7 +263,7 @@ func GetColumnIndexes(modelType reflect.Type, columnsName []string, driver strin
266263 return
267264}
268265
269- func FindTag (tag string , key string ) (string , bool ) {
266+ func findTag (tag string , key string ) (string , bool ) {
270267 if has := strings .Contains (tag , key ); has {
271268 str1 := strings .Split (tag , ";" )
272269 num := len (str1 )
@@ -291,17 +288,17 @@ func contains(array []string, v string) bool {
291288 return false
292289}
293290
294- func ScanType (rows * sql.Rows , modelTypes reflect.Type , indexes []int ) (t []interface {}, err error ) {
291+ func scanType (rows * sql.Rows , modelTypes reflect.Type , indexes []int ) (t []interface {}, err error ) {
295292 for rows .Next () {
296293 initArray := reflect .New (modelTypes ).Interface ()
297- if err = rows .Scan (StructScan (initArray , indexes )... ); err == nil {
294+ if err = rows .Scan (structScan (initArray , indexes )... ); err == nil {
298295 t = append (t , initArray )
299296 }
300297 }
301298 return
302299}
303300
304- func GetDriver (db * sql.DB ) string {
301+ func getDriver (db * sql.DB ) string {
305302 driver := reflect .TypeOf (db .Driver ()).String ()
306303 switch driver {
307304 case "*pq.Driver" :
0 commit comments