@@ -616,8 +616,7 @@ extension Table {
616616 }
617617}
618618
619- // TODO: Support composite keys.
620- extension PrimaryKeyedTable where TableColumns. PrimaryColumn == TableColumn < Self , PrimaryKey > {
619+ extension PrimaryKeyedTable {
621620 /// An upsert statement for given drafts.
622621 ///
623622 /// Generates an insert statement with an upsert clause. Useful for building forms that can both
@@ -636,15 +635,20 @@ extension PrimaryKeyedTable where TableColumns.PrimaryColumn == TableColumn<Self
636635 public static func upsert(
637636 @InsertValuesBuilder < Self > values: ( ) -> [ [ QueryFragment ] ]
638637 ) -> InsertOf < Self > {
639- insert (
640- values: values,
641- onConflict: { $0. primaryKey } ,
642- doUpdate: { updates, _ in
638+ Insert (
639+ conflictResolution: nil ,
640+ columnNames: TableColumns . writableColumns. map ( \. name) ,
641+ conflictTargetColumnNames: columns. primaryKey. _names,
642+ conflictTargetFilter: [ ] ,
643+ values: . values( values ( ) ) ,
644+ updates: Updates { updates in
643645 for (column, excluded) in zip ( Draft . TableColumns. writableColumns, Excluded . writableColumns)
644- where column . name != columns. primaryKey. name {
646+ where ! columns. primaryKey. _names . contains ( column . name) {
645647 updates. set ( column, excluded. queryFragment)
646648 }
647- }
649+ } ,
650+ updateFilter: [ ] ,
651+ returning: [ ]
648652 )
649653 }
650654}
0 commit comments