on dev help sign in
Merge branch 'dev' into dev-readme
commit030a374c3e8ad99453e7d64b8fdf51100cfd3edd authorEitan Chatav <eitan@Eitans-MacBook-Pro.local> dateMon 17 Jun 2019, 21:58 (7 years ago) parent60bc8aca8ab4b4
3 files changed+66−45
squeal-postgresql/src/Squeal/PostgreSQL/Binary.hs+47−44 squeal-postgresql/src/Squeal/PostgreSQL/Definition.hs+10 squeal-postgresql/src/Squeal/PostgreSQL/PQ.hs+9−1
squeal-postgresql/src/Squeal/PostgreSQL/Binary.hs+47−44
@@ -681,50 +681,53 @@ instance
681681 = fmap fromRecord
682682 . hsequence'
683683 . htrans (Proxy @FromField) fromField
684−instance (FromField (col ::: pg) (col ::: hask))
685− => FromRow '[col ::: pg] (P (col ::: hask)) where
686− fromRow (pg :* Nil) = (unComp . fromField) pg
687−instance
688− ( row ~ Join row1 row2
689− , FromRow row1 hask1
690− , FromRow row2 hask2
691− , SListI row
692− ) => FromRow row (hask1, hask2) where
693− fromRow row = case disjoin @row1 @row2 row of
694− (row1, row2) -> (,) <$> fromRow row1 <*> fromRow row2
695−instance
696− ( row ~ Join row1 row23
697− , FromRow row1 hask1
698− , FromRow row23 (hask2, hask3)
699− , SListI row
700− ) => FromRow row (hask1, hask2, hask3) where
701− fromRow row = case disjoin @row1 @row23 row of
702− (row1, row23) -> do
703− hask1 <- fromRow row1
704− (hask2, hask3) <- fromRow row23
705− return (hask1, hask2, hask3)
706−instance
707− ( row ~ Join row1 row234
708− , FromRow row1 hask1
709− , FromRow row234 (hask2, hask3, hask4)
710− , SListI row
711− ) => FromRow row (hask1, hask2, hask3, hask4) where
712− fromRow row = case disjoin @row1 @row234 row of
713− (row1, row234) -> do
714− hask1 <- fromRow row1
715− (hask2, hask3, hask4) <- fromRow row234
716− return (hask1, hask2, hask3, hask4)
717−instance
718− ( row ~ Join row1 row2345
719− , FromRow row1 hask1
720− , FromRow row2345 (hask2, hask3, hask4, hask5)
721− , SListI row
722− ) => FromRow row (hask1, hask2, hask3, hask4, hask5) where
723− fromRow row = case disjoin @row1 @row2345 row of
724− (row1, row2345) -> do
725− hask1 <- fromRow row1
726− (hask2, hask3, hask4, hask5) <- fromRow row2345
727− return (hask1, hask2, hask3, hask4, hask5)
684+------------------------------------------------------
685+-- P records
686+------------------------------------------------------
687+-- instance (FromField (col ::: pg) (col ::: hask))
688+-- => FromRow '[col ::: pg] (P (col ::: hask)) where
689+-- fromRow (pg :* Nil) = (unComp . fromField) pg
690+-- instance
691+-- ( row ~ Join row1 row2
692+-- , FromRow row1 hask1
693+-- , FromRow row2 hask2
694+-- , SListI row
695+-- ) => FromRow row (hask1, hask2) where
696+-- fromRow row = case disjoin @row1 @row2 row of
697+-- (row1, row2) -> (,) <$> fromRow row1 <*> fromRow row2
698+-- instance
699+-- ( row ~ Join row1 row23
700+-- , FromRow row1 hask1
701+-- , FromRow row23 (hask2, hask3)
702+-- , SListI row
703+-- ) => FromRow row (hask1, hask2, hask3) where
704+-- fromRow row = case disjoin @row1 @row23 row of
705+-- (row1, row23) -> do
706+-- hask1 <- fromRow row1
707+-- (hask2, hask3) <- fromRow row23
708+-- return (hask1, hask2, hask3)
709+-- instance
710+-- ( row ~ Join row1 row234
711+-- , FromRow row1 hask1
712+-- , FromRow row234 (hask2, hask3, hask4)
713+-- , SListI row
714+-- ) => FromRow row (hask1, hask2, hask3, hask4) where
715+-- fromRow row = case disjoin @row1 @row234 row of
716+-- (row1, row234) -> do
717+-- hask1 <- fromRow row1
718+-- (hask2, hask3, hask4) <- fromRow row234
719+-- return (hask1, hask2, hask3, hask4)
720+-- instance
721+-- ( row ~ Join row1 row2345
722+-- , FromRow row1 hask1
723+-- , FromRow row2345 (hask2, hask3, hask4, hask5)
724+-- , SListI row
725+-- ) => FromRow row (hask1, hask2, hask3, hask4, hask5) where
726+-- fromRow row = case disjoin @row1 @row2345 row of
727+-- (row1, row2345) -> do
728+-- hask1 <- fromRow row1
729+-- (hask2, hask3, hask4, hask5) <- fromRow row2345
730+-- return (hask1, hask2, hask3, hask4, hask5)
728731
729732-- | `Only` is a 1-tuple type, useful for encoding a single parameter with
730733-- `toParams` or decoding a single value with `fromRow`.
squeal-postgresql/src/Squeal/PostgreSQL/Definition.hs+10
@@ -31,6 +31,7 @@ module Squeal.PostgreSQL.Definition
3131 ( -- * Definition
3232 Definition (..)
3333 , (>>>)
34+ , manipDefinition
3435 -- * Tables
3536 -- ** Create
3637 , createSchema
@@ -103,6 +104,7 @@ import Squeal.PostgreSQL.Expression.Type
103104import Squeal.PostgreSQL.List
104105import Squeal.PostgreSQL.PG
105106import Squeal.PostgreSQL.Query
107+import Squeal.PostgreSQL.Manipulation
106108import Squeal.PostgreSQL.Render
107109import Squeal.PostgreSQL.Schema
108110
@@ -130,6 +132,14 @@ instance Category Definition where
130132 ddl1 . ddl0 = UnsafeDefinition $
131133 renderSQL ddl0 <> "\n" <> renderSQL ddl1
132134
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+
133143{-----------------------------------------
134144CREATE statements
135145-----------------------------------------}
squeal-postgresql/src/Squeal/PostgreSQL/PQ.hs+9−1
@@ -68,12 +68,13 @@ module Squeal.PostgreSQL.PQ
6868 , okResult
6969 , catchSqueal
7070 , handleSqueal
71+ , trySqueal
7172 ) where
7273
7374import Control.Exception (Exception, throw)
7475import Control.Monad.Except
7576import Control.Monad.Morph
76−import UnliftIO (MonadUnliftIO (..), bracket, catch, handle)
77+import UnliftIO (MonadUnliftIO (..), bracket, catch, handle, try)
7778import Data.ByteString (ByteString)
7879import Data.Foldable
7980import Data.Function ((&))
@@ -678,3 +679,10 @@ handleSqueal
678679 => (SquealException -> io a) -- ^ handler
679680 -> io a -> io a
680681handleSqueal = 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