module Sqel.Data.QuerySchema where import Sqel.Data.Codec (Encoder) import Sqel.Data.SelectExpr (SelectFragment) import Sqel.Data.Sql (ToSql (toSql)) import Sqel.Data.SqlFragment (SelectQuery (SelectQuery)) data QuerySchema q a = QuerySchema { forall {k} q (a :: k). QuerySchema q a -> [SelectFragment] frags :: [SelectFragment], forall {k} q (a :: k). QuerySchema q a -> Encoder q encoder :: Encoder q } deriving stock (forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a forall q k (a :: k) x. Rep (QuerySchema q a) x -> QuerySchema q a forall q k (a :: k) x. QuerySchema q a -> Rep (QuerySchema q a) x $cto :: forall q k (a :: k) x. Rep (QuerySchema q a) x -> QuerySchema q a $cfrom :: forall q k (a :: k) x. QuerySchema q a -> Rep (QuerySchema q a) x Generic) emptyQuerySchema :: QuerySchema () a emptyQuerySchema :: forall {k} (a :: k). QuerySchema () a emptyQuerySchema = forall {k} q (a :: k). [SelectFragment] -> Encoder q -> QuerySchema q a QuerySchema forall a. Monoid a => a mempty forall a. Monoid a => a mempty instance ToSql (SelectQuery (QuerySchema q a)) where toSql :: SelectQuery (QuerySchema q a) -> Sql toSql (SelectQuery (QuerySchema [SelectFragment] frags Encoder q _)) = forall a. ToSql a => a -> Sql toSql [SelectFragment] frags