@@ -663,12 +663,14 @@ extension QueryType {
663663 }
664664
665665 fileprivate func insertMany( _ or: OnConflict ? , _ values: [ [ Setter ] ] ) -> Insert {
666- guard values. count > 0 else {
666+ guard let firstInsert = values. first else {
667+ // must be at least 1 object or else we don't know columns. Default to default inserts.
667668 return insert ( )
668669 }
669- let insertRows = values. map { rowValues in
670- rowValues. reduce ( ( columns: [ Expressible] ( ) , values: [ Expressible] ( ) ) ) { insert, setter in
671- ( insert. columns + [ setter. column] , insert. values + [ setter. value] )
670+ let columns = firstInsert. map { $0. column }
671+ let insertValues = values. map { rowValues in
672+ rowValues. reduce ( [ Expressible] ( ) ) { insert, setter in
673+ insert + [ setter. value]
672674 }
673675 }
674676
@@ -677,9 +679,9 @@ extension QueryType {
677679 or. map { Expression < Void > ( literal: " OR \( $0. rawValue) " ) } ,
678680 Expression < Void > ( literal: " INTO " ) ,
679681 tableName ( ) ,
680- " " . wrap ( insertRows [ 0 ] . columns) as Expression < Void > ,
682+ " " . wrap ( columns) as Expression < Void > ,
681683 Expression < Void > ( literal: " VALUES " ) ,
682- " , " . join ( insertRows . map ( \ . values ) . map ( { " " . wrap ( $0) as Expression < Void > } ) ) ,
684+ " , " . join ( insertValues . map ( { " " . wrap ( $0) as Expression < Void > } ) ) ,
683685 whereClause
684686 ]
685687 return Insert ( " " . join ( clauses. compactMap { $0 } ) . expression)
0 commit comments