@@ -586,29 +586,6 @@ subselect
586586 -> TableExpression params schema '[table]
587587subselect selection = join (Subselect selection)
588588
589−{-----------------------------------------
590−INSERT statements
591−-----------------------------------------}
592−
593−insertInto
594− :: (SListI columns, HasTable table schema columns)
595− => Alias table
596− -> NP (Aliased (Expression params '[])) columns
597− -> Statement params '[] schema schema
598−insertInto (Alias table) expressions = UnsafeStatement $ "INSERT INTO "
599− <> fromString (symbolVal' table)
600− <> " (" <> ByteString.intercalate ", " aliases
601− <> ") VALUES ("
602− <> ByteString.intercalate ", " values
603− <> ");"
604− where
605− aliases = hcollapse $ hmap
606− (\ (_ `As` Alias name) -> K (fromString (symbolVal' name)))
607− expressions
608− values = hcollapse $ hmap
609− (\ (expression `As` _) -> K (renderExpression expression))
610− expressions
611−
612589{-----------------------------------------
613590CREATE statements
614591-----------------------------------------}
@@ -773,6 +750,58 @@ instance {-# OVERLAPPABLE #-}
773750 DropTable table schema0 schema1
774751 => DropTable table (table' ': schema0) (table' ': schema1)
775752
753+{-----------------------------------------
754+INSERT statements
755+-----------------------------------------}
756+
757+insertInto
758+ :: (SListI columns, HasTable table schema columns)
759+ => Alias table
760+ -> NP (Aliased (Expression params '[])) columns
761+ -> Statement params '[] schema schema
762+insertInto (Alias table) expressions = UnsafeStatement $ "INSERT INTO "
763+ <> fromString (symbolVal' table)
764+ <> " (" <> ByteString.intercalate ", " aliases
765+ <> ") VALUES ("
766+ <> ByteString.intercalate ", " values
767+ <> ");"
768+ where
769+ aliases = hcollapse $ hmap
770+ (\ (_ `As` Alias name) -> K (fromString (symbolVal' name)))
771+ expressions
772+ values = hcollapse $ hmap
773+ (\ (expression `As` _) -> K (renderExpression expression))
774+ expressions
775+
776+insertIntoReturning
777+ :: (SListI columns, SListI results, HasTable table schema columns)
778+ => Alias table
779+ -> NP (Aliased (Expression params '[])) columns
780+ -> NP (Aliased (Expression params '[table ::: columns])) results
781+ -> Statement params results schema schema
782+insertIntoReturning (Alias table) inserts results
783+ = UnsafeStatement . mconcat $
784+ [ "INSERT INTO "
785+ , fromString (symbolVal' table)
786+ , " (" <> ByteString.intercalate ", " aliases
787+ , ") VALUES ("
788+ , ByteString.intercalate ", " values
789+ , ") RETURNING "
790+ , renderList results
791+ , ";"
792+ ]
793+ where
794+ aliases = hcollapse $ hmap
795+ (\ (_ `As` Alias name) -> K (fromString (symbolVal' name)))
796+ inserts
797+ values = hcollapse $ hmap
798+ (\ (expression `As` _) -> K (renderExpression expression))
799+ inserts
800+ renderList
801+ = ByteString.intercalate ", "
802+ . hcollapse
803+ . hmap (K . renderAliased renderExpression)
804+
776805{-----------------------------------------
777806UPDATE statements
778807-----------------------------------------}