module Sqel.Data.TableSchema where import Exon (exon) import Hasql.Decoders (Row) import Hasql.Encoders (Params) import Lens.Micro ((^.)) import Sqel.Data.PgType (PgTable) import Sqel.Data.Sql (ToSql (toSql)) import Sqel.Data.SqlFragment (Create (Create), Select (Select)) data TableSchema a = TableSchema { forall a. TableSchema a -> PgTable a pg :: PgTable a, forall a. TableSchema a -> Row a decoder :: Row a, forall a. TableSchema a -> Params a encoder :: Params a } deriving stock (forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall a x. Rep (TableSchema a) x -> TableSchema a forall a x. TableSchema a -> Rep (TableSchema a) x $cto :: forall a x. Rep (TableSchema a) x -> TableSchema a $cfrom :: forall a x. TableSchema a -> Rep (TableSchema a) x Generic) instance Show (TableSchema a) where showsPrec :: Int -> TableSchema a -> ShowS showsPrec Int d TableSchema {PgTable a pg :: PgTable a $sel:pg:TableSchema :: forall a. TableSchema a -> PgTable a pg} = Bool -> ShowS -> ShowS showParen (Int d forall a. Ord a => a -> a -> Bool > Int 10) [exon|TableSchema #{showsPrec 11 pg}|] instance ToSql (Select (TableSchema a)) where toSql :: Select (TableSchema a) -> Sql toSql (Select TableSchema a ts) = forall a. ToSql a => a -> Sql toSql (forall a. a -> Select a Select (TableSchema a ts forall s a. s -> Getting a s a -> a ^. forall a. IsLabel "pg" a => a #pg)) instance ToSql (Create (TableSchema a)) where toSql :: Create (TableSchema a) -> Sql toSql (Create TableSchema a ts) = forall a. ToSql a => a -> Sql toSql (forall a. a -> Create a Create (TableSchema a ts forall s a. s -> Getting a s a -> a ^. forall a. IsLabel "pg" a => a #pg))