module Sqel.Data.SqlFragment where

import qualified Exon

import Sqel.Data.Sql (ToSql (toSql))

newtype CommaSep a =
  CommaSep { forall a. CommaSep a -> a
unCommaSep :: a }
  deriving stock (CommaSep a -> CommaSep a -> Bool
forall a. Eq a => CommaSep a -> CommaSep a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CommaSep a -> CommaSep a -> Bool
$c/= :: forall a. Eq a => CommaSep a -> CommaSep a -> Bool
== :: CommaSep a -> CommaSep a -> Bool
$c== :: forall a. Eq a => CommaSep a -> CommaSep a -> Bool
Eq, Int -> CommaSep a -> ShowS
forall a. Show a => Int -> CommaSep a -> ShowS
forall a. Show a => [CommaSep a] -> ShowS
forall a. Show a => CommaSep a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CommaSep a] -> ShowS
$cshowList :: forall a. Show a => [CommaSep a] -> ShowS
show :: CommaSep a -> String
$cshow :: forall a. Show a => CommaSep a -> String
showsPrec :: Int -> CommaSep a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> CommaSep a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (CommaSep a) x -> CommaSep a
forall a x. CommaSep a -> Rep (CommaSep a) x
$cto :: forall a x. Rep (CommaSep a) x -> CommaSep a
$cfrom :: forall a x. CommaSep a -> Rep (CommaSep a) x
Generic)

instance ToSql a => ToSql (CommaSep [a]) where
  toSql :: CommaSep [a] -> Sql
toSql (CommaSep [a]
a) =
    forall a (t :: * -> *). (Monoid a, Foldable t) => a -> t a -> a
Exon.intercalate Sql
", " (forall a. ToSql a => a -> Sql
toSql forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [a]
a)

newtype Delete a =
  Delete { forall a. Delete a -> a
unDelete :: a }
  deriving stock (Delete a -> Delete a -> Bool
forall a. Eq a => Delete a -> Delete a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Delete a -> Delete a -> Bool
$c/= :: forall a. Eq a => Delete a -> Delete a -> Bool
== :: Delete a -> Delete a -> Bool
$c== :: forall a. Eq a => Delete a -> Delete a -> Bool
Eq, Int -> Delete a -> ShowS
forall a. Show a => Int -> Delete a -> ShowS
forall a. Show a => [Delete a] -> ShowS
forall a. Show a => Delete a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Delete a] -> ShowS
$cshowList :: forall a. Show a => [Delete a] -> ShowS
show :: Delete a -> String
$cshow :: forall a. Show a => Delete a -> String
showsPrec :: Int -> Delete a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Delete a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Delete a) x -> Delete a
forall a x. Delete a -> Rep (Delete a) x
$cto :: forall a x. Rep (Delete a) x -> Delete a
$cfrom :: forall a x. Delete a -> Rep (Delete a) x
Generic)

newtype From a =
  From { forall a. From a -> a
unFrom :: a }
  deriving stock (From a -> From a -> Bool
forall a. Eq a => From a -> From a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: From a -> From a -> Bool
$c/= :: forall a. Eq a => From a -> From a -> Bool
== :: From a -> From a -> Bool
$c== :: forall a. Eq a => From a -> From a -> Bool
Eq, Int -> From a -> ShowS
forall a. Show a => Int -> From a -> ShowS
forall a. Show a => [From a] -> ShowS
forall a. Show a => From a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [From a] -> ShowS
$cshowList :: forall a. Show a => [From a] -> ShowS
show :: From a -> String
$cshow :: forall a. Show a => From a -> String
showsPrec :: Int -> From a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> From a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (From a) x -> From a
forall a x. From a -> Rep (From a) x
$cto :: forall a x. Rep (From a) x -> From a
$cfrom :: forall a x. From a -> Rep (From a) x
Generic)

newtype Insert a =
  Insert { forall a. Insert a -> a
unInsert :: a }
  deriving stock (Insert a -> Insert a -> Bool
forall a. Eq a => Insert a -> Insert a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Insert a -> Insert a -> Bool
$c/= :: forall a. Eq a => Insert a -> Insert a -> Bool
== :: Insert a -> Insert a -> Bool
$c== :: forall a. Eq a => Insert a -> Insert a -> Bool
Eq, Int -> Insert a -> ShowS
forall a. Show a => Int -> Insert a -> ShowS
forall a. Show a => [Insert a] -> ShowS
forall a. Show a => Insert a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Insert a] -> ShowS
$cshowList :: forall a. Show a => [Insert a] -> ShowS
show :: Insert a -> String
$cshow :: forall a. Show a => Insert a -> String
showsPrec :: Int -> Insert a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Insert a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Insert a) x -> Insert a
forall a x. Insert a -> Rep (Insert a) x
$cto :: forall a x. Rep (Insert a) x -> Insert a
$cfrom :: forall a x. Insert a -> Rep (Insert a) x
Generic)

newtype Into a =
  Into { forall a. Into a -> a
unInto :: a }
  deriving stock (Into a -> Into a -> Bool
forall a. Eq a => Into a -> Into a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Into a -> Into a -> Bool
$c/= :: forall a. Eq a => Into a -> Into a -> Bool
== :: Into a -> Into a -> Bool
$c== :: forall a. Eq a => Into a -> Into a -> Bool
Eq, Int -> Into a -> ShowS
forall a. Show a => Int -> Into a -> ShowS
forall a. Show a => [Into a] -> ShowS
forall a. Show a => Into a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Into a] -> ShowS
$cshowList :: forall a. Show a => [Into a] -> ShowS
show :: Into a -> String
$cshow :: forall a. Show a => Into a -> String
showsPrec :: Int -> Into a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Into a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Into a) x -> Into a
forall a x. Into a -> Rep (Into a) x
$cto :: forall a x. Rep (Into a) x -> Into a
$cfrom :: forall a x. Into a -> Rep (Into a) x
Generic)

newtype Returning a =
  Returning { forall a. Returning a -> a
unReturning :: a }
  deriving stock (Returning a -> Returning a -> Bool
forall a. Eq a => Returning a -> Returning a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Returning a -> Returning a -> Bool
$c/= :: forall a. Eq a => Returning a -> Returning a -> Bool
== :: Returning a -> Returning a -> Bool
$c== :: forall a. Eq a => Returning a -> Returning a -> Bool
Eq, Int -> Returning a -> ShowS
forall a. Show a => Int -> Returning a -> ShowS
forall a. Show a => [Returning a] -> ShowS
forall a. Show a => Returning a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Returning a] -> ShowS
$cshowList :: forall a. Show a => [Returning a] -> ShowS
show :: Returning a -> String
$cshow :: forall a. Show a => Returning a -> String
showsPrec :: Int -> Returning a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Returning a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Returning a) x -> Returning a
forall a x. Returning a -> Rep (Returning a) x
$cto :: forall a x. Rep (Returning a) x -> Returning a
$cfrom :: forall a x. Returning a -> Rep (Returning a) x
Generic)

newtype Select a =
  Select { forall a. Select a -> a
unSelect :: a }
  deriving stock (Select a -> Select a -> Bool
forall a. Eq a => Select a -> Select a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Select a -> Select a -> Bool
$c/= :: forall a. Eq a => Select a -> Select a -> Bool
== :: Select a -> Select a -> Bool
$c== :: forall a. Eq a => Select a -> Select a -> Bool
Eq, Int -> Select a -> ShowS
forall a. Show a => Int -> Select a -> ShowS
forall a. Show a => [Select a] -> ShowS
forall a. Show a => Select a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Select a] -> ShowS
$cshowList :: forall a. Show a => [Select a] -> ShowS
show :: Select a -> String
$cshow :: forall a. Show a => Select a -> String
showsPrec :: Int -> Select a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Select a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Select a) x -> Select a
forall a x. Select a -> Rep (Select a) x
$cto :: forall a x. Rep (Select a) x -> Select a
$cfrom :: forall a x. Select a -> Rep (Select a) x
Generic)

newtype SelectQuery a =
  SelectQuery { forall a. SelectQuery a -> a
unSelectQuery :: a }
  deriving stock (SelectQuery a -> SelectQuery a -> Bool
forall a. Eq a => SelectQuery a -> SelectQuery a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SelectQuery a -> SelectQuery a -> Bool
$c/= :: forall a. Eq a => SelectQuery a -> SelectQuery a -> Bool
== :: SelectQuery a -> SelectQuery a -> Bool
$c== :: forall a. Eq a => SelectQuery a -> SelectQuery a -> Bool
Eq, Int -> SelectQuery a -> ShowS
forall a. Show a => Int -> SelectQuery a -> ShowS
forall a. Show a => [SelectQuery a] -> ShowS
forall a. Show a => SelectQuery a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SelectQuery a] -> ShowS
$cshowList :: forall a. Show a => [SelectQuery a] -> ShowS
show :: SelectQuery a -> String
$cshow :: forall a. Show a => SelectQuery a -> String
showsPrec :: Int -> SelectQuery a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> SelectQuery a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (SelectQuery a) x -> SelectQuery a
forall a x. SelectQuery a -> Rep (SelectQuery a) x
$cto :: forall a x. Rep (SelectQuery a) x -> SelectQuery a
$cfrom :: forall a x. SelectQuery a -> Rep (SelectQuery a) x
Generic)

newtype Update a =
  Update { forall a. Update a -> a
unUpdate :: a }
  deriving stock (Update a -> Update a -> Bool
forall a. Eq a => Update a -> Update a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Update a -> Update a -> Bool
$c/= :: forall a. Eq a => Update a -> Update a -> Bool
== :: Update a -> Update a -> Bool
$c== :: forall a. Eq a => Update a -> Update a -> Bool
Eq, Int -> Update a -> ShowS
forall a. Show a => Int -> Update a -> ShowS
forall a. Show a => [Update a] -> ShowS
forall a. Show a => Update a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Update a] -> ShowS
$cshowList :: forall a. Show a => [Update a] -> ShowS
show :: Update a -> String
$cshow :: forall a. Show a => Update a -> String
showsPrec :: Int -> Update a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Update a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Update a) x -> Update a
forall a x. Update a -> Rep (Update a) x
$cto :: forall a x. Rep (Update a) x -> Update a
$cfrom :: forall a x. Update a -> Rep (Update a) x
Generic)

newtype Create a =
  Create { forall a. Create a -> a
unSelect :: a }
  deriving stock (Create a -> Create a -> Bool
forall a. Eq a => Create a -> Create a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Create a -> Create a -> Bool
$c/= :: forall a. Eq a => Create a -> Create a -> Bool
== :: Create a -> Create a -> Bool
$c== :: forall a. Eq a => Create a -> Create a -> Bool
Eq, Int -> Create a -> ShowS
forall a. Show a => Int -> Create a -> ShowS
forall a. Show a => [Create a] -> ShowS
forall a. Show a => Create a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Create a] -> ShowS
$cshowList :: forall a. Show a => [Create a] -> ShowS
show :: Create a -> String
$cshow :: forall a. Show a => Create a -> String
showsPrec :: Int -> Create a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Create a -> ShowS
Show, forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
forall a x. Rep (Create a) x -> Create a
forall a x. Create a -> Rep (Create a) x
$cto :: forall a x. Rep (Create a) x -> Create a
$cfrom :: forall a x. Create a -> Rep (Create a) x
Generic)