@@ -17,17 +17,19 @@
18module Squeel.PostgreSQL.Statement where
18module Squeel.PostgreSQL.Statement where
20+import Control.Category
20import Data.ByteString (ByteString)
21import Data.ByteString (ByteString)
21import Data.Foldable
22import Data.Foldable
22import Data.Maybe
23import Data.Maybe
23import Data.Monoid
24import Data.Monoid
24import Data.Ratio
25import Data.Ratio
25import Data.String
26import Data.String
26import Generics.SOP
28import Generics.SOP
27import GHC.Exts
29import GHC.Exts
28import GHC.OverloadedLabels
30import GHC.OverloadedLabels
29import GHC.TypeLits
31import GHC.TypeLits
30−import Prelude hiding (RealFrac(..))
32+import Prelude hiding (RealFrac(..), id, (.))
32import qualified Data.ByteString as ByteString
34import qualified Data.ByteString as ByteString
@@ -267,33 +269,34 @@ instance IsString (Expression params tables ('Required (nullity 'PGText))) where
267 '\\' -> "\\\\"
269 '\\' -> "\\\\"
272+type Condition params tables =
270−type Predicate params tables = Expression params tables ('Required ('NotNull 'PGBool))
273+ Expression params tables ('Required ('NotNull 'PGBool))
272−true :: Predicate params tables
275+true :: Condition params tables
273true = UnsafeExpression "TRUE"
276true = UnsafeExpression "TRUE"
275−false :: Predicate params tables
278+false :: Condition params tables
276false = UnsafeExpression "FALSE"
279false = UnsafeExpression "FALSE"
279− :: Predicate params tables
282+ :: Condition params tables
280− -> Predicate params tables
283+ -> Condition params tables
281notB = unsafeUnaryOp "NOT"
284notB = unsafeUnaryOp "NOT"
284− :: Predicate params tables
287+ :: Condition params tables
285− -> Predicate params tables
288+ -> Condition params tables
286− -> Predicate params tables
289+ -> Condition params tables
287(&&*) = unsafeBinaryOp "AND"
290(&&*) = unsafeBinaryOp "AND"
290− :: Predicate params tables
293+ :: Condition params tables
291− -> Predicate params tables
294+ -> Condition params tables
292− -> Predicate params tables
295+ -> Condition params tables
293(||*) = unsafeBinaryOp "OR"
296(||*) = unsafeBinaryOp "OR"
295caseWhenThenElse
298caseWhenThenElse
296− :: [(Predicate params tables, Expression params tables ty)]
299+ :: [(Condition params tables, Expression params tables ty)]
297 -> Expression params tables ty
300 -> Expression params tables ty
298 -> Expression params tables ty
301 -> Expression params tables ty
299caseWhenThenElse whenThens else_ = UnsafeExpression $ mconcat
302caseWhenThenElse whenThens else_ = UnsafeExpression $ mconcat
@@ -310,7 +313,7 @@ caseWhenThenElse whenThens else_ = UnsafeExpression $ mconcat
312ifThenElse
315ifThenElse
313− :: Predicate params tables
316+ :: Condition params tables
314 -> Expression params tables ty
317 -> Expression params tables ty
315 -> Expression params tables ty
318 -> Expression params tables ty
316 -> Expression params tables ty
319 -> Expression params tables ty
@@ -319,37 +322,37 @@ ifThenElse if_ then_ else_ = caseWhenThenElse [(if_,then_)] else_
320 :: Expression params tables ty
323 :: Expression params tables ty
321 -> Expression params tables ty
324 -> Expression params tables ty
322− -> Predicate params tables
325+ -> Condition params tables
323(==*) = unsafeBinaryOp "="
326(==*) = unsafeBinaryOp "="
326 :: Expression params tables ty
329 :: Expression params tables ty
327 -> Expression params tables ty
330 -> Expression params tables ty
328− -> Predicate params tables
331+ -> Condition params tables
329(/=*) = unsafeBinaryOp "<>"
332(/=*) = unsafeBinaryOp "<>"
332 :: Expression params tables ty
335 :: Expression params tables ty
333 -> Expression params tables ty
336 -> Expression params tables ty
334− -> Predicate params tables
337+ -> Condition params tables
335(>=*) = unsafeBinaryOp ">="
338(>=*) = unsafeBinaryOp ">="
338 :: Expression params tables ty
341 :: Expression params tables ty
339 -> Expression params tables ty
342 -> Expression params tables ty
340− -> Predicate params tables
343+ -> Condition params tables
341(<*) = unsafeBinaryOp "<"
344(<*) = unsafeBinaryOp "<"
344 :: Expression params tables ty
347 :: Expression params tables ty
345 -> Expression params tables ty
348 -> Expression params tables ty
346− -> Predicate params tables
349+ -> Condition params tables
347(<=*) = unsafeBinaryOp "<="
350(<=*) = unsafeBinaryOp "<="
350 :: Expression params tables ty
353 :: Expression params tables ty
351 -> Expression params tables ty
354 -> Expression params tables ty
352− -> Predicate params tables
355+ -> Condition params tables
353(>*) = unsafeBinaryOp ">"
356(>*) = unsafeBinaryOp ">"
355{-----------------------------------------
358{-----------------------------------------
@@ -357,7 +360,6 @@ tables
357-----------------------------------------}
360-----------------------------------------}
359newtype Table
362newtype Table
360− (params :: [ColumnType])
361 (schema :: [(Symbol,[(Symbol,ColumnType)])])
363 (schema :: [(Symbol,[(Symbol,ColumnType)])])
362 (columns :: [(Symbol,ColumnType)])
364 (columns :: [(Symbol,ColumnType)])
363 = UnsafeTable { renderTable :: ByteString }
365 = UnsafeTable { renderTable :: ByteString }
@@ -365,7 +367,7 @@ newtype Table
366class KnownSymbol table => HasTable table tables columns
368class KnownSymbol table => HasTable table tables columns
367 | table tables -> columns where
369 | table tables -> columns where
368− getTable :: Proxy# table -> Table params tables columns
370+ getTable :: Proxy# table -> Table tables columns
369 getTable table = UnsafeTable $ fromString $ symbolVal' table
371 getTable table = UnsafeTable $ fromString $ symbolVal' table
370instance {-# OVERLAPPING #-} KnownSymbol table
372instance {-# OVERLAPPING #-} KnownSymbol table
371 => HasTable table ((table ::: columns) ': tables) columns
373 => HasTable table ((table ::: columns) ': tables) columns
@@ -374,9 +376,136 @@ instance {-# OVERLAPPABLE #-}
374 => HasTable table (table' ': schema) columns
376 => HasTable table (table' ': schema) columns
376instance HasTable table schema columns
378instance HasTable table schema columns
377− => IsLabel table (Table params schema columns) where
379+ => IsLabel table (Table schema columns) where
378 fromLabel = getTable
380 fromLabel = getTable
382+data TableReference params schema tables where
384+ :: Aliased (Table schema) table
385+ -> TableReference params schema '[table]
387+ :: Aliased (Query schema params) table
388+ -> TableReference params schema '[table]
390+ :: TableReference params schema right
391+ -> TableReference params schema left
392+ -> TableReference params schema (Join left right)
394+ :: TableReference params schema right
395+ -> Condition params (Join left right)
396+ -> TableReference params schema left
397+ -> TableReference params schema (Join left right)
399+ :: TableReference params schema right
400+ -> Condition params (Join left right)
401+ -> TableReference params schema left
402+ -> TableReference params schema (Join left (NullifyTables right))
404+ :: TableReference params schema right
405+ -> Condition params (Join left right)
406+ -> TableReference params schema left
407+ -> TableReference params schema (Join (NullifyTables left) right)
409+ :: TableReference params schema right
410+ -> Condition params (Join left right)
411+ -> TableReference params schema left
412+ -> TableReference params schema
413+ (Join (NullifyTables left) (NullifyTables right))
415+renderTableReference :: TableReference params schema tables -> ByteString
416+renderTableReference = \case
417+ Table table -> renderAliased renderTable table
418+ Subquery selection -> renderAliased renderQuery selection
419+ CrossJoin right left -> mconcat
420+ [ renderTableReference left
422+ , renderTableReference right
424+ InnerJoin right on left -> mconcat
425+ [ renderTableReference left
427+ , renderTableReference right
429+ , renderExpression on
431+ LeftOuterJoin right on left -> mconcat
432+ [ renderTableReference left
433+ , " LEFT OUTER JOIN "
434+ , renderTableReference right
436+ , renderExpression on
438+ RightOuterJoin right on left -> mconcat
439+ [ renderTableReference left
440+ , " RIGHT OUTER JOIN "
441+ , renderTableReference right
443+ , renderExpression on
445+ FullOuterJoin right on left -> mconcat
446+ [ renderTableReference left
447+ , " FULL OUTER JOIN "
448+ , renderTableReference right
450+ , renderExpression on
454+ (params :: [ColumnType])
455+ (schema :: [(Symbol,[(Symbol,ColumnType)])])
456+ (tables :: [(Symbol,[(Symbol,ColumnType)])])
458+ { fromClause :: TableReference params schema tables
459+ , whereClause :: [Condition params tables]
460+ , limitClause :: Maybe Word64
461+ , offsetClause :: Maybe Word64
464+renderTableExpression
465+ :: TableExpression params schema tables
467+renderTableExpression (TableExpression tables whs' lims' offs') = mconcat
468+ [ "FROM ", renderTableReference tables
470+ , renderLimits lims'
471+ , renderOffsets offs'
473+ renderWheres = \case
475+ wh:[] -> " WHERE " <> renderExpression wh
476+ wh:whs -> " WHERE " <> renderExpression (foldr (&&*) wh whs)
477+ renderLimits = \case
479+ Just lim -> " LIMIT " <> fromString (show lim)
480+ renderOffsets = \case
482+ Just off -> " OFFSET " <> fromString (show off)
485+ :: TableReference params schema tables
486+ -> TableExpression params schema tables
487+from tables = TableExpression tables [] Nothing Nothing
490+ :: Condition params tables
491+ -> TableExpression params schema tables
492+ -> TableExpression params schema tables
493+where_ wh tables = tables {whereClause = wh : whereClause tables}
497+ -> TableExpression params schema tables
498+ -> TableExpression params schema tables
499+limit lim tables = tables
500+ {limitClause = maybe (Just lim) (Just . min lim) (limitClause tables)}
504+ -> TableExpression params schema tables
505+ -> TableExpression params schema tables
506+offset off tables = tables
507+ {offsetClause = maybe (Just off) (Just . (off +)) (offsetClause tables)}
380{-----------------------------------------
509{-----------------------------------------
381type expressions
510type expressions
382-----------------------------------------}
511-----------------------------------------}
@@ -511,209 +640,80 @@ instance PGTyped 'PGJsonb where pgtype = jsonb
511statements
640statements
512-----------------------------------------}
641-----------------------------------------}
514−newtype Statement
643+newtype DataDefinition
515− (params :: [ColumnType])
516− (columns :: [(Symbol,ColumnType)])
517 (schema0 :: [(Symbol,[(Symbol,ColumnType)])])
644 (schema0 :: [(Symbol,[(Symbol,ColumnType)])])
518 (schema1 :: [(Symbol,[(Symbol,ColumnType)])])
645 (schema1 :: [(Symbol,[(Symbol,ColumnType)])])
519− = UnsafeStatement { renderStatement :: ByteString }
646+ = UnsafeDataDefinition { renderDataDefinition :: ByteString }
522−-- newtype PreparedStatement
648+instance Category DataDefinition where
523−-- (params :: [ColumnType])
649+ id = UnsafeDataDefinition ";"
524−-- (columns :: [(Symbol,ColumnType)])
650+ dd1 . dd0 = UnsafeDataDefinition $
525−-- (schema0 :: [(Symbol,[(Symbol,ColumnType)])])
651+ renderDataDefinition dd0 <> " " <> renderDataDefinition dd1
526−-- (schema1 :: [(Symbol,[(Symbol,ColumnType)])])
527−-- = UnsafePreparedStatement { renderPreparedStatement :: ByteString }
528−-- deriving (Show,Eq)
530−{-----------------------------------------
532−-----------------------------------------}
534−data Join params schema tables where
653+newtype DataManipulation
536− :: Aliased (Table params schema) table
537− -> Join params schema '[table]
539− :: Aliased (Selection params schema) table
540− -> Join params schema '[table]
542− :: Aliased (Table params schema) table
543− -> Join params schema tables
544− -> Join params schema (table ': tables)
546− :: Aliased (Table params schema) table
547− -> Predicate params (table ': tables)
548− -> Join params schema tables
549− -> Join params schema (table ': tables)
551− :: Aliased (Table params schema) right
552− -> Predicate params '[left,right]
553− -> Join params schema (tables)
554− -> Join params schema (NullifyTable right ': left ': tables)
556− :: Aliased (Table params schema) right
557− -> Predicate params '[left,right]
558− -> Join params schema (left : tables)
559− -> Join params schema (right ': NullifyTable left ': tables)
561− :: Aliased (Table params schema) right
562− -> Predicate params '[left,right]
563− -> Join params schema (left : tables)
564− -> Join params schema
565− (NullifyTable right ': NullifyTable left ': tables)
567−renderJoin :: Join params schema tables -> ByteString
569− Table table -> renderAliased renderTable table
570− Subselect selection -> "SELECT " <> renderAliased renderSelection selection
571− Cross table tables -> mconcat
574− , renderAliased renderTable table
576− Inner table on tables -> mconcat
579− , renderAliased renderTable table
581− , renderExpression on
583− LeftOuter table on tables -> mconcat
585− , " LEFT OUTER JOIN "
586− , renderAliased renderTable table
588− , renderExpression on
590− RightOuter table on tables -> mconcat
592− , " RIGHT OUTER JOIN "
593− , renderAliased renderTable table
595− , renderExpression on
597− FullOuter table on tables -> mconcat
599− , " FULL OUTER JOIN "
600− , renderAliased renderTable table
602− , renderExpression on
605−instance HasTable table schema columns
606− => IsLabel table (Join params schema '[table ::: columns]) where
607− fromLabel p = Table $ fromLabel p
610− (params :: [ColumnType])
611 (schema :: [(Symbol,[(Symbol,ColumnType)])])
654 (schema :: [(Symbol,[(Symbol,ColumnType)])])
612− (tables :: [(Symbol,[(Symbol,ColumnType)])])
614− { joinClause :: Join params schema tables
615− , whereClause :: [Predicate params tables]
616− , limitClause :: [Expression params '[] ('Required ('NotNull 'PGInt8))]
617− , offsetClause :: [Expression params '[] ('Required ('NotNull 'PGInt8))]
620−renderTableExpression :: TableExpression params schema tables -> ByteString
621−renderTableExpression (TableExpression tables whs' lims' offs') = mconcat
624− , renderLimits lims'
625− , renderOffsets offs'
627− renderWheres = \case
629− wh:[] -> " WHERE " <> renderExpression wh
630− wh:whs -> " WHERE " <> renderExpression (foldr (&&*) wh whs)
631− renderLimits = \case
633− lim:[] -> " LIMIT " <> renderExpression lim
636− , ByteString.intercalate ", " (renderExpression <$> reverse lims)
639− renderOffsets = \case
641− off:[] -> " OFFSET " <> renderExpression off
642− off:offs -> " OFFSET " <> renderExpression (foldr (+) off offs)
644−instance (HasTable table schema columns, table ~ table')
645− => IsLabel table (TableExpression params schema '[table' ::: columns]) where
646− fromLabel p = join (fromLabel p)
649− :: Join params schema tables
650− -> TableExpression params schema tables
651−join tables = TableExpression tables [] [] []
654− :: Predicate params tables
655− -> TableExpression params schema tables
656− -> TableExpression params schema tables
657−where_ wh (TableExpression tabs whs lims offs) =
658− TableExpression tabs (wh:whs) lims offs
661− :: Expression params '[] ('Required ('NotNull 'PGInt8))
662− -> TableExpression params schema tables
663− -> TableExpression params schema tables
664−limit lim (TableExpression tabs whs lims offs) =
665− TableExpression tabs whs (lim:lims) offs
668− :: Expression params '[] ('Required ('NotNull 'PGInt8))
669− -> TableExpression params schema tables
670− -> TableExpression params schema tables
671−offset off (TableExpression tabs whs lims offs) =
672− TableExpression tabs whs lims (off:offs)
675 (params :: [ColumnType])
655 (params :: [ColumnType])
676− (schema :: [(Symbol,[(Symbol,ColumnType)])])
677 (columns :: [(Symbol,ColumnType)])
656 (columns :: [(Symbol,ColumnType)])
678− = UnsafeSelection { renderSelection :: ByteString }
657+ = UnsafeDataManipulation { renderDataManipulation :: ByteString }
681−starFrom
659+newtype Query
682− :: tables ~ '[table ::: columns]
660+ (schema :: [(Symbol,[(Symbol,ColumnType)])])
683− => TableExpression params schema tables
661+ (params :: [ColumnType])
662+ (columns :: [(Symbol,ColumnType)])
663+ = UnsafeQuery { renderQuery :: ByteString }
666+ :: Query schema params columns
667+ -> DataManipulation schema params columns
668+query q = UnsafeDataManipulation $ renderQuery q <> ";"
670+union, unionAll, intersect, intersectAll, except, exceptAll
671+ :: Query schema params columns
672+ -> Query schema params columns
684− -> Selection params schema columns
673+ -> Query schema params columns
685−starFrom tabs = UnsafeSelection $ "* FROM " <> renderTableExpression tabs
674+q1 `union` q2 = UnsafeQuery $
675+ renderQuery q1 <> " UNION " <> renderQuery q2
676+q1 `unionAll` q2 = UnsafeQuery $
677+ renderQuery q1 <> " UNION ALL " <> renderQuery q2
678+q1 `intersect` q2 = UnsafeQuery $
679+ renderQuery q1 <> " INTERSECT " <> renderQuery q2
680+q1 `intersectAll` q2 = UnsafeQuery $
681+ renderQuery q1 <> " INTERSECT ALL " <> renderQuery q2
682+q1 `except` q2 = UnsafeQuery $
683+ renderQuery q1 <> " EXCEPT " <> renderQuery q2
684+q1 `exceptAll` q2 = UnsafeQuery $
685+ renderQuery q1 <> " EXCEPT ALL " <> renderQuery q2
687−dotStarFrom
687+{-----------------------------------------
688− :: HasTable table tables columns
688+SELECT statements
689− => Alias table
689+-----------------------------------------}
690− -> TableExpression params schema tables
691− -> Selection params schema columns
692−table `dotStarFrom` tables = UnsafeSelection $
693− renderAlias table <> ".* FROM " <> renderTableExpression tables
696 :: SListI columns
692 :: SListI columns
697 => NP (Aliased (Expression params tables)) columns
693 => NP (Aliased (Expression params tables)) columns
698 -> TableExpression params schema tables
694 -> TableExpression params schema tables
699− -> Selection params schema columns
695+ -> Query schema params columns
700−list `from` tabs = UnsafeSelection $
696+select list tabs = UnsafeQuery $
701− renderList list <> " FROM " <> renderTableExpression tabs
697+ "SELECT " <> renderList list <> " " <> renderTableExpression tabs
703 renderList
699 renderList
704 = ByteString.intercalate ", "
700 = ByteString.intercalate ", "
705 . hcollapse
701 . hcollapse
706 . hmap (K . renderAliased renderExpression)
702 . hmap (K . renderAliased renderExpression)
709− :: Selection params schema columns
705+ :: (tables ~ '[table ::: columns])
706+ => TableExpression params schema tables
710− -> Statement params columns schema schema
707+ -> Query schema params columns
711−select = UnsafeStatement . ("SELECT " <>) . (<> ";") . renderSelection
708+selectStar tabs = UnsafeQuery $ "SELECT * " <> renderTableExpression tabs
713−subselect
710+selectDotStar
714− :: Aliased (Selection params schema) table
711+ :: HasTable table tables columns
715− -> TableExpression params schema '[table]
713+ -> TableExpression params schema tables
716−subselect selection = join (Subselect selection)
714+ -> Query schema params columns
715+selectDotStar table tables = UnsafeQuery $
716+ "SELECT " <> renderAlias table <> ".* " <> renderTableExpression tables
718{-----------------------------------------
718{-----------------------------------------
719CREATE statements
719CREATE statements
@@ -723,8 +723,8 @@ createTable
723 :: (KnownSymbol table, SListI columns)
723 :: (KnownSymbol table, SListI columns)
724 => Alias table
724 => Alias table
725 -> NP (Aliased TypeExpression) columns
725 -> NP (Aliased TypeExpression) columns
726− -> Statement '[] '[] schema (Create table columns schema)
726+ -> DataDefinition schema (Create table columns schema)
727−createTable table columns = UnsafeStatement $ mconcat
727+createTable table columns = UnsafeDataDefinition $ mconcat
728 [ "CREATE TABLE "
728 [ "CREATE TABLE "
729 , renderAlias table
729 , renderAlias table
@@ -744,9 +744,8 @@ DROP statements
745 :: KnownSymbol table
745 :: KnownSymbol table
746 => Alias table
746 => Alias table
747− -> Statement '[] '[] schema (Drop table schema)
747+ -> DataDefinition schema (Drop table schema)
748−dropTable table = UnsafeStatement $
749− "DROP TABLE " <> renderAlias table <> ";"
748+dropTable table = UnsafeDataDefinition $ "DROP TABLE " <> renderAlias table <> ";"
751{-----------------------------------------
750{-----------------------------------------
752ALTER statements
751ALTER statements
@@ -756,8 +755,8 @@ alterTable
756 :: HasTable table schema columns0
755 :: HasTable table schema columns0
757 => Alias table
756 => Alias table
758 -> AlterTable columns0 columns1
757 -> AlterTable columns0 columns1
759− -> Statement '[] '[] schema (Alter table schema columns1)
758+ -> DataDefinition schema (Alter table schema columns1)
760−alterTable table alteration = UnsafeStatement $
759+alterTable table alteration = UnsafeDataDefinition $
761 "ALTER TABLE "
760 "ALTER TABLE "
762 <> renderAlias table
761 <> renderAlias table
@@ -768,8 +767,8 @@ alterTableRename
768 :: (KnownSymbol table0, KnownSymbol table1)
767 :: (KnownSymbol table0, KnownSymbol table1)
769 => Alias table0
768 => Alias table0
770 -> Alias table1
769 -> Alias table1
771− -> Statement '[] '[] schema (Rename table0 table1 schema)
770+ -> DataDefinition schema (Rename table0 table1 schema)
772−alterTableRename table0 table1 = UnsafeStatement $
771+alterTableRename table0 table1 = UnsafeDataDefinition $
773 "ALTER TABLE "
772 "ALTER TABLE "
774 <> renderAlias table0
773 <> renderAlias table0
775 <> " RENAME TO "
774 <> " RENAME TO "
@@ -862,8 +861,8 @@ insertInto
862 :: (SListI columns, HasTable table schema columns)
861 :: (SListI columns, HasTable table schema columns)
863 => Alias table
862 => Alias table
864 -> NP (Aliased (Expression params '[])) columns
863 -> NP (Aliased (Expression params '[])) columns
865− -> Statement params '[] schema schema
864+ -> DataManipulation schema params '[]
866−insertInto table expressions = UnsafeStatement $ "INSERT INTO "
865+insertInto table expressions = UnsafeDataManipulation $ "INSERT INTO "
867 <> renderAlias table
866 <> renderAlias table
868 <> " (" <> ByteString.intercalate ", " aliases
867 <> " (" <> ByteString.intercalate ", " aliases
869 <> ") VALUES ("
868 <> ") VALUES ("
@@ -882,9 +881,9 @@ insertIntoReturning
882 => Alias table
881 => Alias table
883 -> NP (Aliased (Expression params '[])) columns
882 -> NP (Aliased (Expression params '[])) columns
884 -> NP (Aliased (Expression params '[table ::: columns])) results
883 -> NP (Aliased (Expression params '[table ::: columns])) results
885− -> Statement params results schema schema
884+ -> DataManipulation schema params results
886insertIntoReturning table inserts results
885insertIntoReturning table inserts results
887− = UnsafeStatement . mconcat $
886+ = UnsafeDataManipulation . mconcat $
888 [ "INSERT INTO "
887 [ "INSERT INTO "
889 , renderAlias table
888 , renderAlias table
890 , " (" <> ByteString.intercalate ", " aliases
889 , " (" <> ByteString.intercalate ", " aliases
@@ -929,9 +928,9 @@ update
929 :: (HasTable table schema columns, SListI columns)
928 :: (HasTable table schema columns, SListI columns)
930 => Alias table
929 => Alias table
931 -> NP (Aliased (UpdateExpression params '[table ::: columns])) columns
930 -> NP (Aliased (UpdateExpression params '[table ::: columns])) columns
932− -> Predicate params '[table ::: columns]
931+ -> Condition params '[table ::: columns]
933− -> Statement params '[] schema schema
932+ -> DataManipulation schema params '[]
934−update table columns wh = UnsafeStatement $ mconcat
933+update table columns wh = UnsafeDataManipulation $ mconcat
935 [ "UPDATE "
934 [ "UPDATE "
936 , renderAlias table
935 , renderAlias table
937 , " SET "
936 , " SET "
@@ -944,10 +943,10 @@ updateReturning
944 :: (SListI columns, SListI results, HasTable table schema columns)
943 :: (SListI columns, SListI results, HasTable table schema columns)
945 => Alias table
944 => Alias table
946 -> NP (Aliased (UpdateExpression params '[table ::: columns])) columns
945 -> NP (Aliased (UpdateExpression params '[table ::: columns])) columns
947− -> Predicate params '[table ::: columns]
946+ -> Condition params '[table ::: columns]
948 -> NP (Aliased (Expression params '[table ::: columns])) results
947 -> NP (Aliased (Expression params '[table ::: columns])) results
949− -> Statement params results schema schema
948+ -> DataManipulation schema params results
950−updateReturning table updates wh results = UnsafeStatement $ mconcat
949+updateReturning table updates wh results = UnsafeDataManipulation $ mconcat
951 [ "UPDATE "
950 [ "UPDATE "
952 , renderAlias table
951 , renderAlias table
953 , " SET "
952 , " SET "
@@ -968,9 +967,9 @@ upsertInto
968 => Alias table
967 => Alias table
969 -> NP (Aliased (Expression params '[])) columns
968 -> NP (Aliased (Expression params '[])) columns
970 -> NP (Aliased (UpdateExpression params '[table ::: columns])) columns
969 -> NP (Aliased (UpdateExpression params '[table ::: columns])) columns
971− -> Predicate params '[table ::: columns]
970+ -> Condition params '[table ::: columns]
972− -> Statement params '[] schema schema
971+ -> DataManipulation schema params '[]
973−upsertInto table inserts updates wh = UnsafeStatement . mconcat $
972+upsertInto table inserts updates wh = UnsafeDataManipulation . mconcat $
974 [ "INSERT INTO "
973 [ "INSERT INTO "
975 , renderAlias table
974 , renderAlias table
976 , " (" <> ByteString.intercalate ", " aliases
975 , " (" <> ByteString.intercalate ", " aliases
@@ -995,11 +994,11 @@ upsertIntoReturning
995 => Alias table
994 => Alias table
996 -> NP (Aliased (Expression params '[])) columns
995 -> NP (Aliased (Expression params '[])) columns
997 -> NP (Aliased (UpdateExpression params '[table ::: columns])) columns
996 -> NP (Aliased (UpdateExpression params '[table ::: columns])) columns
998− -> Predicate params '[table ::: columns]
997+ -> Condition params '[table ::: columns]
999 -> NP (Aliased (Expression params '[table ::: columns])) results
998 -> NP (Aliased (Expression params '[table ::: columns])) results
1000− -> Statement params results schema schema
999+ -> DataManipulation schema params results
1001upsertIntoReturning table inserts updates wh results =
1000upsertIntoReturning table inserts updates wh results =
1002− UnsafeStatement . mconcat $
1001+ UnsafeDataManipulation . mconcat $
1003 [ "INSERT INTO "
1002 [ "INSERT INTO "
1004 , renderAlias table
1003 , renderAlias table
1005 , " (" <> ByteString.intercalate ", " aliases
1004 , " (" <> ByteString.intercalate ", " aliases
@@ -1032,9 +1031,9 @@ DELETE statements
1032deleteFrom
1031deleteFrom
1033 :: HasTable table schema columns
1032 :: HasTable table schema columns
1034 => Alias table
1033 => Alias table
1035− -> Predicate params '[table ::: columns]
1034+ -> Condition params '[table ::: columns]
1036− -> Statement params '[] schema schema
1035+ -> DataManipulation schema params '[]
1037−deleteFrom table wh = UnsafeStatement $ mconcat
1036+deleteFrom table wh = UnsafeDataManipulation $ mconcat
1038 [ "DELETE FROM "
1037 [ "DELETE FROM "
1039 , renderAlias table
1038 , renderAlias table
1040 , " WHERE ", renderExpression wh, ";"
1039 , " WHERE ", renderExpression wh, ";"