on dev help sign in
Merge branch 'dev' into dev-readme
030a374Eitan Chatav
squeal-postgresql/src/Squeal/PostgreSQL/Binary.hs+47−44
@@ -681,50 +681,53 @@ instance
681 = fmap fromRecord
681 = fmap fromRecord
682 . hsequence'
682 . hsequence'
683 . htrans (Proxy @FromField) fromField
683 . htrans (Proxy @FromField) fromField
684+------------------------------------------------------
685+-- P records
686+------------------------------------------------------
684−instance (FromField (col ::: pg) (col ::: hask))
687+-- instance (FromField (col ::: pg) (col ::: hask))
685− => FromRow '[col ::: pg] (P (col ::: hask)) where
688+-- => FromRow '[col ::: pg] (P (col ::: hask)) where
686− fromRow (pg :* Nil) = (unComp . fromField) pg
689+-- fromRow (pg :* Nil) = (unComp . fromField) pg
687−instance
690+-- instance
688− ( row ~ Join row1 row2
691+-- ( row ~ Join row1 row2
689− , FromRow row1 hask1
692+-- , FromRow row1 hask1
690− , FromRow row2 hask2
693+-- , FromRow row2 hask2
691− , SListI row
694+-- , SListI row
692− ) => FromRow row (hask1, hask2) where
695+-- ) => FromRow row (hask1, hask2) where
693− fromRow row = case disjoin @row1 @row2 row of
696+-- fromRow row = case disjoin @row1 @row2 row of
694− (row1, row2) -> (,) <$> fromRow row1 <*> fromRow row2
697+-- (row1, row2) -> (,) <$> fromRow row1 <*> fromRow row2
695−instance
698+-- instance
696− ( row ~ Join row1 row23
699+-- ( row ~ Join row1 row23
697− , FromRow row1 hask1
700+-- , FromRow row1 hask1
698− , FromRow row23 (hask2, hask3)
701+-- , FromRow row23 (hask2, hask3)
699− , SListI row
702+-- , SListI row
700− ) => FromRow row (hask1, hask2, hask3) where
703+-- ) => FromRow row (hask1, hask2, hask3) where
701− fromRow row = case disjoin @row1 @row23 row of
704+-- fromRow row = case disjoin @row1 @row23 row of
702− (row1, row23) -> do
705+-- (row1, row23) -> do
703− hask1 <- fromRow row1
706+-- hask1 <- fromRow row1
704− (hask2, hask3) <- fromRow row23
707+-- (hask2, hask3) <- fromRow row23
705− return (hask1, hask2, hask3)
708+-- return (hask1, hask2, hask3)
706−instance
709+-- instance
707− ( row ~ Join row1 row234
710+-- ( row ~ Join row1 row234
708− , FromRow row1 hask1
711+-- , FromRow row1 hask1
709− , FromRow row234 (hask2, hask3, hask4)
712+-- , FromRow row234 (hask2, hask3, hask4)
710− , SListI row
713+-- , SListI row
711− ) => FromRow row (hask1, hask2, hask3, hask4) where
714+-- ) => FromRow row (hask1, hask2, hask3, hask4) where
712− fromRow row = case disjoin @row1 @row234 row of
715+-- fromRow row = case disjoin @row1 @row234 row of
713− (row1, row234) -> do
716+-- (row1, row234) -> do
714− hask1 <- fromRow row1
717+-- hask1 <- fromRow row1
715− (hask2, hask3, hask4) <- fromRow row234
718+-- (hask2, hask3, hask4) <- fromRow row234
716− return (hask1, hask2, hask3, hask4)
719+-- return (hask1, hask2, hask3, hask4)
717−instance
720+-- instance
718− ( row ~ Join row1 row2345
721+-- ( row ~ Join row1 row2345
719− , FromRow row1 hask1
722+-- , FromRow row1 hask1
720− , FromRow row2345 (hask2, hask3, hask4, hask5)
723+-- , FromRow row2345 (hask2, hask3, hask4, hask5)
721− , SListI row
724+-- , SListI row
722− ) => FromRow row (hask1, hask2, hask3, hask4, hask5) where
725+-- ) => FromRow row (hask1, hask2, hask3, hask4, hask5) where
723− fromRow row = case disjoin @row1 @row2345 row of
726+-- fromRow row = case disjoin @row1 @row2345 row of
724− (row1, row2345) -> do
727+-- (row1, row2345) -> do
725− hask1 <- fromRow row1
728+-- hask1 <- fromRow row1
726− (hask2, hask3, hask4, hask5) <- fromRow row2345
729+-- (hask2, hask3, hask4, hask5) <- fromRow row2345
727− return (hask1, hask2, hask3, hask4, hask5)
730+-- return (hask1, hask2, hask3, hask4, hask5)
728
731
729-- | `Only` is a 1-tuple type, useful for encoding a single parameter with
732-- | `Only` is a 1-tuple type, useful for encoding a single parameter with
730-- `toParams` or decoding a single value with `fromRow`.
733-- `toParams` or decoding a single value with `fromRow`.
squeal-postgresql/src/Squeal/PostgreSQL/Definition.hs+10
@@ -31,6 +31,7 @@ module Squeal.PostgreSQL.Definition
31 ( -- * Definition
31 ( -- * Definition
32 Definition (..)
32 Definition (..)
33 , (>>>)
33 , (>>>)
34+ , manipDefinition
34 -- * Tables
35 -- * Tables
35 -- ** Create
36 -- ** Create
36 , createSchema
37 , createSchema
@@ -103,6 +104,7 @@ import Squeal.PostgreSQL.Expression.Type
103import Squeal.PostgreSQL.List
104import Squeal.PostgreSQL.List
104import Squeal.PostgreSQL.PG
105import Squeal.PostgreSQL.PG
105import Squeal.PostgreSQL.Query
106import Squeal.PostgreSQL.Query
107+import Squeal.PostgreSQL.Manipulation
106import Squeal.PostgreSQL.Render
108import Squeal.PostgreSQL.Render
107import Squeal.PostgreSQL.Schema
109import Squeal.PostgreSQL.Schema
108
110
@@ -130,6 +132,14 @@ instance Category Definition where
130 ddl1 . ddl0 = UnsafeDefinition $
132 ddl1 . ddl0 = UnsafeDefinition $
131 renderSQL ddl0 <> "\n" <> renderSQL ddl1
133 renderSQL ddl0 <> "\n" <> renderSQL ddl1
132
134
135+-- | A `Manipulation` without input or output can be run as a statement
136+-- along with other `Definition`s, by embedding it using `manipDefinition`.
137+manipDefinition
138+ :: Manipulation '[] schemas '[] '[]
139+ -- ^ no input or output
140+ -> Definition schemas schemas
141+manipDefinition = UnsafeDefinition . (<> ";") . renderSQL
142+
133{-----------------------------------------
143{-----------------------------------------
134CREATE statements
144CREATE statements
135-----------------------------------------}
145-----------------------------------------}
squeal-postgresql/src/Squeal/PostgreSQL/PQ.hs+9−1
@@ -68,12 +68,13 @@ module Squeal.PostgreSQL.PQ
68 , okResult
68 , okResult
69 , catchSqueal
69 , catchSqueal
70 , handleSqueal
70 , handleSqueal
71+ , trySqueal
71 ) where
72 ) where
72
73
73import Control.Exception (Exception, throw)
74import Control.Exception (Exception, throw)
74import Control.Monad.Except
75import Control.Monad.Except
75import Control.Monad.Morph
76import Control.Monad.Morph
76−import UnliftIO (MonadUnliftIO (..), bracket, catch, handle)
77+import UnliftIO (MonadUnliftIO (..), bracket, catch, handle, try)
77import Data.ByteString (ByteString)
78import Data.ByteString (ByteString)
78import Data.Foldable
79import Data.Foldable
79import Data.Function ((&))
80import Data.Function ((&))
@@ -678,3 +679,10 @@ handleSqueal
678 => (SquealException -> io a) -- ^ handler
679 => (SquealException -> io a) -- ^ handler
679 -> io a -> io a
680 -> io a -> io a
680handleSqueal = handle
681handleSqueal = handle
682+
683+-- | `Either` return a `SquealException` or a result.
684+trySqueal
685+ :: MonadUnliftIO io
686+ => io a
687+ -> io (Either SquealException a)
688+trySqueal = try