@@ -721,12 +721,16 @@ type private TypeChecker(cxt : ITypeInferenceContext, scope : InferredSelectScop
721721 failAt insert.Columns.[ 0 ]. Source ( Error.insertMissingColumns missingColumns)
722722 | _ ->
723723 failAt insert.InsertInto.Source Error.insertIntoNonTable
724- { With = withClause
725- Or = insert.Or
726- InsertInto = table
727- Columns = columns // we *must* specify these because our order might not match DB's
728- Data = checker.Select( insert.Data, SelfQueryShape.Known( knownShape))
729- }
724+ match columns |> tryFindFirstDuplicateBy ( fun c -> c.Value) with
725+ | None ->
726+ { With = withClause
727+ Or = insert.Or
728+ InsertInto = table
729+ Columns = columns // we *must* specify these because our order might not match DB's
730+ Data = checker.Select( insert.Data, SelfQueryShape.Known( knownShape))
731+ }
732+ | Some duplicate ->
733+ failAt duplicate.Source ( Error.insertDuplicateColumn duplicate.Value)
730734
731735 member this.Update ( update : UpdateStmt ) =
732736 let checker , withClause =
@@ -750,14 +754,18 @@ type private TypeChecker(cxt : ITypeInferenceContext, scope : InferredSelectScop
750754 | _ ->
751755 failAt name.Source <| Error.noSuchColumnToSet updateTable name.Value
752756 |]
753- { With = withClause
754- UpdateTable = updateTable
755- Or = update.Or
756- Set = setColumns
757- Where = Option.map checker.Expr update.Where
758- OrderBy = Option.map ( rmap checker.OrderingTerm) update.OrderBy
759- Limit = Option.map checker.Limit update.Limit
760- }
757+ match setColumns |> tryFindFirstDuplicateBy ( fun ( name , _ ) -> name.Value) with
758+ | None ->
759+ { With = withClause
760+ UpdateTable = updateTable
761+ Or = update.Or
762+ Set = setColumns
763+ Where = Option.map checker.Expr update.Where
764+ OrderBy = Option.map ( rmap checker.OrderingTerm) update.OrderBy
765+ Limit = Option.map checker.Limit update.Limit
766+ }
767+ | Some ( name, _) ->
768+ failAt name.Source ( Error.updateDuplicateColumn name.Value)
761769
762770 member this.Stmt ( stmt : Stmt ) =
763771 match stmt with
0 commit comments