@@ -418,22 +418,22 @@ data Join params schema tables where
418 -> Join params schema (table ': tables)
418 -> Join params schema (table ': tables)
420 :: Aliased (Table params schema) table
420 :: Aliased (Table params schema) table
421− -> Expression params (table ': tables) ('Required ('NotNull 'PGBool))
421+ -> Predicate params (table ': tables)
422 -> Join params schema tables
422 -> Join params schema tables
423 -> Join params schema (table ': tables)
423 -> Join params schema (table ': tables)
424 LeftOuter
424 LeftOuter
425 :: Aliased (Table params schema) right
425 :: Aliased (Table params schema) right
426− -> Expression params '[left,right] ('Required ('NotNull 'PGBool))
426+ -> Predicate params '[left,right]
427 -> Join params schema (tables)
427 -> Join params schema (tables)
428 -> Join params schema (NullifyTable right ': left ': tables)
428 -> Join params schema (NullifyTable right ': left ': tables)
429 RightOuter
429 RightOuter
430 :: Aliased (Table params schema) right
430 :: Aliased (Table params schema) right
431− -> Expression params '[left,right] ('Required ('NotNull 'PGBool))
431+ -> Predicate params '[left,right]
432 -> Join params schema (left : tables)
432 -> Join params schema (left : tables)
433 -> Join params schema (right ': NullifyTable left ': tables)
433 -> Join params schema (right ': NullifyTable left ': tables)
434 FullOuter
434 FullOuter
435 :: Aliased (Table params schema) right
435 :: Aliased (Table params schema) right
436− -> Expression params '[left,right] ('Required ('NotNull 'PGBool))
436+ -> Predicate params '[left,right]
437 -> Join params schema (left : tables)
437 -> Join params schema (left : tables)
438 -> Join params schema
438 -> Join params schema
439 (NullifyTable right ': NullifyTable left ': tables)
439 (NullifyTable right ': NullifyTable left ': tables)
@@ -827,7 +827,7 @@ update
827 :: (HasTable table schema columns, SListI columns)
827 :: (HasTable table schema columns, SListI columns)
828 => Alias table
828 => Alias table
829 -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
829 -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
830− -> Expression params '[table ::: columns] ('Required ('NotNull 'PGBool))
830+ -> Predicate params '[table ::: columns]
831 -> Statement params '[] schema schema
831 -> Statement params '[] schema schema
832update (Alias table) columns wh = UnsafeStatement $ mconcat
832update (Alias table) columns wh = UnsafeStatement $ mconcat
833 [ "UPDATE "
833 [ "UPDATE "
@@ -838,12 +838,35 @@ update (Alias table) columns wh = UnsafeStatement $ mconcat
838 , " WHERE ", renderExpression wh, ";"
838 , " WHERE ", renderExpression wh, ";"
842+ :: (SListI columns, SListI results, HasTable table schema columns)
844+ -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
845+ -> Predicate params '[table ::: columns]
846+ -> NP (Aliased (Expression params '[table ::: columns])) results
847+ -> Statement params results schema schema
848+updateReturning (Alias table) updates wh results = UnsafeStatement $ mconcat
850+ , fromString $ symbolVal' table
852+ , ByteString.intercalate ", " . catMaybes . hcollapse $
853+ hmap (K . renderSet) updates
854+ , " WHERE ", renderExpression wh
855+ , " RETURNING ", renderList results
860+ = ByteString.intercalate ", "
862+ . hmap (K . renderAliased renderExpression)
841upsertInto
864upsertInto
842 :: (SListI columns, HasTable table schema columns)
865 :: (SListI columns, HasTable table schema columns)
843 => Alias table
866 => Alias table
844 -> NP (Aliased (Expression params '[])) columns
867 -> NP (Aliased (Expression params '[])) columns
845 -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
868 -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
846− -> Expression params '[table ::: columns] ('Required ('NotNull 'PGBool))
869+ -> Predicate params '[table ::: columns]
847 -> Statement params '[] schema schema
870 -> Statement params '[] schema schema
848upsertInto (Alias table) inserts updates wh = UnsafeStatement . mconcat $
871upsertInto (Alias table) inserts updates wh = UnsafeStatement . mconcat $
849 [ "INSERT INTO "
872 [ "INSERT INTO "
@@ -865,6 +888,40 @@ upsertInto (Alias table) inserts updates wh = UnsafeStatement . mconcat $
865 (\ (expression `As` _) -> K (renderExpression expression))
888 (\ (expression `As` _) -> K (renderExpression expression))
892+ :: (SListI columns, SListI results, HasTable table schema columns)
894+ -> NP (Aliased (Expression params '[])) columns
895+ -> NP (Aliased (Maybe :.: Expression params '[table ::: columns])) columns
896+ -> Predicate params '[table ::: columns]
897+ -> NP (Aliased (Expression params '[table ::: columns])) results
898+ -> Statement params results schema schema
899+upsertIntoReturning (Alias table) inserts updates wh results = UnsafeStatement . mconcat $
901+ , fromString (symbolVal' table)
902+ , " (" <> ByteString.intercalate ", " aliases
904+ , ByteString.intercalate ", " values
905+ , ") ON CONFLICT UPDATE "
906+ , fromString $ symbolVal' table
908+ , ByteString.intercalate ", " . catMaybes . hcollapse $
909+ hmap (K . renderSet) updates
910+ , " WHERE ", renderExpression wh
911+ , " RETURNING ", renderList results
914+ aliases = hcollapse $ hmap
915+ (\ (_ `As` Alias name) -> K (fromString (symbolVal' name)))
917+ values = hcollapse $ hmap
918+ (\ (expression `As` _) -> K (renderExpression expression))
921+ = ByteString.intercalate ", "
923+ . hmap (K . renderAliased renderExpression)
868{-----------------------------------------
925{-----------------------------------------
869DELETE statements
926DELETE statements
870-----------------------------------------}
927-----------------------------------------}
@@ -872,7 +929,7 @@ DELETE statements
872deleteFrom
929deleteFrom
873 :: (HasTable table schema columns, SListI columns)
930 :: (HasTable table schema columns, SListI columns)
874 => Alias table
931 => Alias table
875− -> Expression params '[table ::: columns] ('Required ('NotNull 'PGBool))
932+ -> Predicate params '[table ::: columns]
876 -> Statement params '[] schema schema
933 -> Statement params '[] schema schema
877deleteFrom (Alias table) wh = UnsafeStatement $ mconcat
934deleteFrom (Alias table) wh = UnsafeStatement $ mconcat
878 [ "DELETE FROM "
935 [ "DELETE FROM "