@@ -309,38 +309,46 @@ func parseUpdate(node *sqlparser.Update, query string, s *Schema, settings dinos
309
309
}
310
310
311
311
func parseInsert (node * sqlparser.Insert , query string , s * Schema , settings dinosql.GenerateSettings ) (* Query , error ) {
312
+ params := []* Param {}
312
313
cols := node .Columns
313
314
tableName := node .Table .Name .String ()
314
- rows , ok := node .Rows .(sqlparser.Values )
315
- if ! ok {
316
- return nil , fmt .Errorf ("Unknown insert row type of %T" , node .Rows )
317
- }
318
315
319
- params := []* Param {}
320
-
321
- for _ , row := range rows {
322
- for colIx , item := range row {
323
- switch v := item .(type ) {
324
- case * sqlparser.SQLVal :
325
- if v .Type == sqlparser .ValArg {
326
- colName := cols [colIx ].String ()
327
- colDfn , err := s .schemaLookup (tableName , colName )
328
- varName := string (v .Val )
329
- p := & Param {OriginalName : varName }
330
- if err == nil {
331
- p .Name = paramName (colDfn .Name , varName )
332
- p .Typ = goTypeCol (colDfn , settings )
333
- } else {
334
- p .Name = "Unknown"
335
- p .Typ = "interface{}"
316
+ switch rows := node .Rows .(type ) {
317
+ case * sqlparser.Select :
318
+ selectQuery , err := parseSelect (rows , query , s , settings )
319
+ if err != nil {
320
+ return nil , err
321
+ }
322
+ params = append (params , selectQuery .Params ... )
323
+ case sqlparser.Values :
324
+ for _ , row := range rows {
325
+ for colIx , item := range row {
326
+ switch v := item .(type ) {
327
+ case * sqlparser.SQLVal :
328
+ if v .Type == sqlparser .ValArg {
329
+ colName := cols [colIx ].String ()
330
+ colDfn , err := s .schemaLookup (tableName , colName )
331
+ varName := string (v .Val )
332
+ p := & Param {OriginalName : varName }
333
+ if err == nil {
334
+ p .Name = paramName (colDfn .Name , varName )
335
+ p .Typ = goTypeCol (colDfn , settings )
336
+ } else {
337
+ p .Name = "Unknown"
338
+ p .Typ = "interface{}"
339
+ }
340
+ params = append (params , p )
336
341
}
337
- params = append (params , p )
342
+
343
+ default :
344
+ panic ("Error occurred in parsing INSERT statement" )
338
345
}
339
- default :
340
- panic ("Error occurred in parsing INSERT statement" )
341
346
}
342
347
}
348
+ default :
349
+ return nil , fmt .Errorf ("Unknown insert row type of %T" , node .Rows )
343
350
}
351
+
344
352
parsedQuery := & Query {
345
353
SQL : query ,
346
354
Params : params ,
0 commit comments