@@ -735,13 +735,13 @@ update
735 -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
735 -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
736 -> Expression params '[table ::: columns] ('Required ('NotNull 'PGBool))
736 -> Expression params '[table ::: columns] ('Required ('NotNull 'PGBool))
737 -> Statement params '[] schema schema
737 -> Statement params '[] schema schema
738−update (Alias table) columns where' = UnsafeStatement $ mconcat
738+update (Alias table) columns wh = UnsafeStatement $ mconcat
739 [ "UPDATE "
739 [ "UPDATE "
740 , fromString $ symbolVal' table
740 , fromString $ symbolVal' table
741 , " SET "
741 , " SET "
742 , ByteString.intercalate ", " . catMaybes . hcollapse $
742 , ByteString.intercalate ", " . catMaybes . hcollapse $
743 hmap (K . renderSet) columns
743 hmap (K . renderSet) columns
744− , " WHERE ", renderExpression where', ";"
744+ , " WHERE ", renderExpression wh, ";"
746 renderSet
746 renderSet
747 :: Aliased (Maybe :.: Expression params tables) column
747 :: Aliased (Maybe :.: Expression params tables) column
@@ -753,3 +753,40 @@ update (Alias table) columns where' = UnsafeStatement $ mconcat
753 , renderExpression expression
753 , renderExpression expression
755 Comp Nothing `As` _ -> Nothing
755 Comp Nothing `As` _ -> Nothing
758+ :: (SListI columns, HasTable table schema columns)
760+ -> NP (Aliased (Expression params '[])) columns
761+ -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
762+ -> Expression params '[table ::: columns] ('Required ('NotNull 'PGBool))
763+ -> Statement params '[] schema schema
764+upsertInto (Alias table) inserts updates wh = UnsafeStatement . mconcat $
766+ , fromString (symbolVal' table)
767+ , " (" <> ByteString.intercalate ", " aliases
769+ , ByteString.intercalate ", " values
770+ , ") ON CONFLICT UPDATE "
771+ , fromString $ symbolVal' table
773+ , ByteString.intercalate ", " . catMaybes . hcollapse $
774+ hmap (K . renderSet) updates
775+ , " WHERE ", renderExpression wh, ";"
778+ :: Aliased (Maybe :.: Expression params '[table ::: columns]) column
781+ Comp (Just expression) `As` Alias column -> Just $ mconcat
782+ [ fromString $ symbolVal' column
784+ , renderExpression expression
786+ Comp Nothing `As` _ -> Nothing
787+ aliases = hcollapse $ hmap
788+ (\ (_ `As` Alias name) -> K (fromString (symbolVal' name)))
790+ values = hcollapse $ hmap
791+ (\ (expression `As` _) -> K (renderExpression expression))