{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE CPP #-}
module Database.Beam.Migrate.SQL.Builder where
import Database.Beam.Backend.SQL
import Database.Beam.Backend.SQL.Builder
import Database.Beam.Migrate.SQL
import Database.Beam.Migrate.Serialization
import Control.Applicative
import Data.ByteString.Builder (Builder, byteString, toLazyByteString)
import qualified Data.ByteString.Lazy.Char8 as BCL
#if !MIN_VERSION_base(4, 11, 0)
import Data.Semigroup
#endif
data SqlSyntaxBuilderCreateTableOptions
= SqlSyntaxBuilderCreateTableOptions
SqlSyntaxBuilder
SqlSyntaxBuilder
deriving SqlSyntaxBuilderCreateTableOptions
-> SqlSyntaxBuilderCreateTableOptions -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SqlSyntaxBuilderCreateTableOptions
-> SqlSyntaxBuilderCreateTableOptions -> Bool
$c/= :: SqlSyntaxBuilderCreateTableOptions
-> SqlSyntaxBuilderCreateTableOptions -> Bool
== :: SqlSyntaxBuilderCreateTableOptions
-> SqlSyntaxBuilderCreateTableOptions -> Bool
$c== :: SqlSyntaxBuilderCreateTableOptions
-> SqlSyntaxBuilderCreateTableOptions -> Bool
Eq
instance IsSql92DdlCommandSyntax SqlSyntaxBuilder where
type Sql92DdlCommandCreateTableSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92DdlCommandDropTableSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92DdlCommandAlterTableSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
createTableCmd :: Sql92DdlCommandCreateTableSyntax SqlSyntaxBuilder
-> SqlSyntaxBuilder
createTableCmd = forall a. a -> a
id
alterTableCmd :: Sql92DdlCommandAlterTableSyntax SqlSyntaxBuilder
-> SqlSyntaxBuilder
alterTableCmd = forall a. a -> a
id
dropTableCmd :: Sql92DdlCommandDropTableSyntax SqlSyntaxBuilder -> SqlSyntaxBuilder
dropTableCmd = forall a. a -> a
id
instance IsSql92DropTableSyntax SqlSyntaxBuilder where
type Sql92DropTableTableNameSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
dropTableSyntax :: Sql92DropTableTableNameSyntax SqlSyntaxBuilder -> SqlSyntaxBuilder
dropTableSyntax Sql92DropTableTableNameSyntax SqlSyntaxBuilder
tblNm =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
ByteString -> Builder
byteString ByteString
"DROP TABLE " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql Sql92DropTableTableNameSyntax SqlSyntaxBuilder
tblNm
instance IsSql92AlterTableSyntax SqlSyntaxBuilder where
type Sql92AlterTableTableNameSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92AlterTableAlterTableActionSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
alterTableSyntax :: Sql92AlterTableTableNameSyntax SqlSyntaxBuilder
-> Sql92AlterTableAlterTableActionSyntax SqlSyntaxBuilder
-> SqlSyntaxBuilder
alterTableSyntax Sql92AlterTableTableNameSyntax SqlSyntaxBuilder
tblNm Sql92AlterTableAlterTableActionSyntax SqlSyntaxBuilder
action =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
ByteString -> Builder
byteString ByteString
"ALTER TABLE " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql Sql92AlterTableTableNameSyntax SqlSyntaxBuilder
tblNm forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
byteString ByteString
" " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql Sql92AlterTableAlterTableActionSyntax SqlSyntaxBuilder
action
instance IsSql92AlterTableActionSyntax SqlSyntaxBuilder where
type Sql92AlterTableAlterColumnActionSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92AlterTableColumnSchemaSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
alterColumnSyntax :: Text
-> Sql92AlterTableAlterColumnActionSyntax SqlSyntaxBuilder
-> SqlSyntaxBuilder
alterColumnSyntax Text
colNm Sql92AlterTableAlterColumnActionSyntax SqlSyntaxBuilder
action =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
ByteString -> Builder
byteString ByteString
"ALTER COLUMN " forall a. Semigroup a => a -> a -> a
<> Text -> Builder
quoteSql Text
colNm forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
byteString ByteString
" " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql Sql92AlterTableAlterColumnActionSyntax SqlSyntaxBuilder
action
addColumnSyntax :: Text
-> Sql92AlterTableColumnSchemaSyntax SqlSyntaxBuilder
-> SqlSyntaxBuilder
addColumnSyntax Text
colNm Sql92AlterTableColumnSchemaSyntax SqlSyntaxBuilder
colSchema =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
ByteString -> Builder
byteString ByteString
"ADD COLUMN " forall a. Semigroup a => a -> a -> a
<> Text -> Builder
quoteSql Text
colNm forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
byteString ByteString
" " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql Sql92AlterTableColumnSchemaSyntax SqlSyntaxBuilder
colSchema
dropColumnSyntax :: Text -> SqlSyntaxBuilder
dropColumnSyntax Text
colNm =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
ByteString -> Builder
byteString ByteString
"DROP COLUMN " forall a. Semigroup a => a -> a -> a
<> Text -> Builder
quoteSql Text
colNm
renameColumnToSyntax :: Text -> Text -> SqlSyntaxBuilder
renameColumnToSyntax Text
oldNm Text
newNm =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
ByteString -> Builder
byteString ByteString
"RENAME COLUMN " forall a. Semigroup a => a -> a -> a
<> Text -> Builder
quoteSql Text
oldNm forall a. Semigroup a => a -> a -> a
<> Builder
" TO " forall a. Semigroup a => a -> a -> a
<> Text -> Builder
quoteSql Text
newNm
renameTableToSyntax :: Text -> SqlSyntaxBuilder
renameTableToSyntax Text
newNm =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
ByteString -> Builder
byteString ByteString
"RENAME TO " forall a. Semigroup a => a -> a -> a
<> Text -> Builder
quoteSql Text
newNm
instance IsSql92AlterColumnActionSyntax SqlSyntaxBuilder where
setNotNullSyntax :: SqlSyntaxBuilder
setNotNullSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder (ByteString -> Builder
byteString ByteString
"SET NOT NULL")
setNullSyntax :: SqlSyntaxBuilder
setNullSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder (ByteString -> Builder
byteString ByteString
"DROP NOT NULL")
instance IsSql92CreateTableSyntax SqlSyntaxBuilder where
type Sql92CreateTableTableNameSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92CreateTableColumnSchemaSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92CreateTableTableConstraintSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92CreateTableOptionsSyntax SqlSyntaxBuilder = SqlSyntaxBuilderCreateTableOptions
createTableSyntax :: Maybe (Sql92CreateTableOptionsSyntax SqlSyntaxBuilder)
-> Sql92CreateTableTableNameSyntax SqlSyntaxBuilder
-> [(Text, Sql92CreateTableColumnSchemaSyntax SqlSyntaxBuilder)]
-> [Sql92CreateTableTableConstraintSyntax SqlSyntaxBuilder]
-> SqlSyntaxBuilder
createTableSyntax Maybe (Sql92CreateTableOptionsSyntax SqlSyntaxBuilder)
tableOptions Sql92CreateTableTableNameSyntax SqlSyntaxBuilder
tblName [(Text, Sql92CreateTableColumnSchemaSyntax SqlSyntaxBuilder)]
fieldSchemas [Sql92CreateTableTableConstraintSyntax SqlSyntaxBuilder]
constraints =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
ByteString -> Builder
byteString ByteString
"CREATE " forall a. Semigroup a => a -> a -> a
<>
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (\SqlSyntaxBuilder
b -> SqlSyntaxBuilder -> Builder
buildSql SqlSyntaxBuilder
b forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
byteString ByteString
" ") Maybe SqlSyntaxBuilder
beforeOptions forall a. Semigroup a => a -> a -> a
<>
ByteString -> Builder
byteString ByteString
" TABLE " forall a. Semigroup a => a -> a -> a
<>
SqlSyntaxBuilder -> Builder
buildSql Sql92CreateTableTableNameSyntax SqlSyntaxBuilder
tblName forall a. Semigroup a => a -> a -> a
<>
ByteString -> Builder
byteString ByteString
"(" forall a. Semigroup a => a -> a -> a
<>
Builder -> [Builder] -> Builder
buildSepBy (ByteString -> Builder
byteString ByteString
", ")
(forall a b. (a -> b) -> [a] -> [b]
map (\(Text
nm, SqlSyntaxBuilder
schema) -> Text -> Builder
quoteSql Text
nm forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
byteString ByteString
" " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql SqlSyntaxBuilder
schema) [(Text, Sql92CreateTableColumnSchemaSyntax SqlSyntaxBuilder)]
fieldSchemas forall a. Semigroup a => a -> a -> a
<>
forall a b. (a -> b) -> [a] -> [b]
map SqlSyntaxBuilder -> Builder
buildSql [Sql92CreateTableTableConstraintSyntax SqlSyntaxBuilder]
constraints) forall a. Semigroup a => a -> a -> a
<>
ByteString -> Builder
byteString ByteString
")" forall a. Semigroup a => a -> a -> a
<>
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (\SqlSyntaxBuilder
a -> SqlSyntaxBuilder -> Builder
buildSql SqlSyntaxBuilder
a forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
byteString ByteString
" ") Maybe SqlSyntaxBuilder
afterOptions
where
(Maybe SqlSyntaxBuilder
beforeOptions, Maybe SqlSyntaxBuilder
afterOptions) =
case Maybe (Sql92CreateTableOptionsSyntax SqlSyntaxBuilder)
tableOptions of
Just (SqlSyntaxBuilderCreateTableOptions SqlSyntaxBuilder
b SqlSyntaxBuilder
a) -> (forall a. a -> Maybe a
Just SqlSyntaxBuilder
b, forall a. a -> Maybe a
Just SqlSyntaxBuilder
a)
Maybe (Sql92CreateTableOptionsSyntax SqlSyntaxBuilder)
Nothing -> (forall a. Maybe a
Nothing, forall a. Maybe a
Nothing)
instance IsSql92TableConstraintSyntax SqlSyntaxBuilder where
primaryKeyConstraintSyntax :: [Text] -> SqlSyntaxBuilder
primaryKeyConstraintSyntax [Text]
fs =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
ByteString -> Builder
byteString ByteString
"PRIMARY KEY(" forall a. Semigroup a => a -> a -> a
<> Builder -> [Builder] -> Builder
buildSepBy (ByteString -> Builder
byteString ByteString
", ") (forall a b. (a -> b) -> [a] -> [b]
map Text -> Builder
quoteSql [Text]
fs) forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
byteString ByteString
")"
data ConstraintAttributeTiming = InitiallyDeferred | InitiallyImmediate
deriving (Int -> ConstraintAttributeTiming -> ShowS
[ConstraintAttributeTiming] -> ShowS
ConstraintAttributeTiming -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ConstraintAttributeTiming] -> ShowS
$cshowList :: [ConstraintAttributeTiming] -> ShowS
show :: ConstraintAttributeTiming -> String
$cshow :: ConstraintAttributeTiming -> String
showsPrec :: Int -> ConstraintAttributeTiming -> ShowS
$cshowsPrec :: Int -> ConstraintAttributeTiming -> ShowS
Show, ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
$c/= :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
== :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
$c== :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
Eq, Eq ConstraintAttributeTiming
ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
ConstraintAttributeTiming -> ConstraintAttributeTiming -> Ordering
ConstraintAttributeTiming
-> ConstraintAttributeTiming -> ConstraintAttributeTiming
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ConstraintAttributeTiming
-> ConstraintAttributeTiming -> ConstraintAttributeTiming
$cmin :: ConstraintAttributeTiming
-> ConstraintAttributeTiming -> ConstraintAttributeTiming
max :: ConstraintAttributeTiming
-> ConstraintAttributeTiming -> ConstraintAttributeTiming
$cmax :: ConstraintAttributeTiming
-> ConstraintAttributeTiming -> ConstraintAttributeTiming
>= :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
$c>= :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
> :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
$c> :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
<= :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
$c<= :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
< :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
$c< :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Bool
compare :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Ordering
$ccompare :: ConstraintAttributeTiming -> ConstraintAttributeTiming -> Ordering
Ord, Int -> ConstraintAttributeTiming
ConstraintAttributeTiming -> Int
ConstraintAttributeTiming -> [ConstraintAttributeTiming]
ConstraintAttributeTiming -> ConstraintAttributeTiming
ConstraintAttributeTiming
-> ConstraintAttributeTiming -> [ConstraintAttributeTiming]
ConstraintAttributeTiming
-> ConstraintAttributeTiming
-> ConstraintAttributeTiming
-> [ConstraintAttributeTiming]
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: ConstraintAttributeTiming
-> ConstraintAttributeTiming
-> ConstraintAttributeTiming
-> [ConstraintAttributeTiming]
$cenumFromThenTo :: ConstraintAttributeTiming
-> ConstraintAttributeTiming
-> ConstraintAttributeTiming
-> [ConstraintAttributeTiming]
enumFromTo :: ConstraintAttributeTiming
-> ConstraintAttributeTiming -> [ConstraintAttributeTiming]
$cenumFromTo :: ConstraintAttributeTiming
-> ConstraintAttributeTiming -> [ConstraintAttributeTiming]
enumFromThen :: ConstraintAttributeTiming
-> ConstraintAttributeTiming -> [ConstraintAttributeTiming]
$cenumFromThen :: ConstraintAttributeTiming
-> ConstraintAttributeTiming -> [ConstraintAttributeTiming]
enumFrom :: ConstraintAttributeTiming -> [ConstraintAttributeTiming]
$cenumFrom :: ConstraintAttributeTiming -> [ConstraintAttributeTiming]
fromEnum :: ConstraintAttributeTiming -> Int
$cfromEnum :: ConstraintAttributeTiming -> Int
toEnum :: Int -> ConstraintAttributeTiming
$ctoEnum :: Int -> ConstraintAttributeTiming
pred :: ConstraintAttributeTiming -> ConstraintAttributeTiming
$cpred :: ConstraintAttributeTiming -> ConstraintAttributeTiming
succ :: ConstraintAttributeTiming -> ConstraintAttributeTiming
$csucc :: ConstraintAttributeTiming -> ConstraintAttributeTiming
Enum, ConstraintAttributeTiming
forall a. a -> a -> Bounded a
maxBound :: ConstraintAttributeTiming
$cmaxBound :: ConstraintAttributeTiming
minBound :: ConstraintAttributeTiming
$cminBound :: ConstraintAttributeTiming
Bounded)
data SqlConstraintAttributesBuilder
= SqlConstraintAttributesBuilder
{ SqlConstraintAttributesBuilder -> Maybe ConstraintAttributeTiming
_sqlConstraintAttributeTiming :: Maybe ConstraintAttributeTiming
, SqlConstraintAttributesBuilder -> Maybe Bool
_sqlConstraintAttributeDeferrable :: Maybe Bool }
deriving (Int -> SqlConstraintAttributesBuilder -> ShowS
[SqlConstraintAttributesBuilder] -> ShowS
SqlConstraintAttributesBuilder -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [SqlConstraintAttributesBuilder] -> ShowS
$cshowList :: [SqlConstraintAttributesBuilder] -> ShowS
show :: SqlConstraintAttributesBuilder -> String
$cshow :: SqlConstraintAttributesBuilder -> String
showsPrec :: Int -> SqlConstraintAttributesBuilder -> ShowS
$cshowsPrec :: Int -> SqlConstraintAttributesBuilder -> ShowS
Show, SqlConstraintAttributesBuilder
-> SqlConstraintAttributesBuilder -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: SqlConstraintAttributesBuilder
-> SqlConstraintAttributesBuilder -> Bool
$c/= :: SqlConstraintAttributesBuilder
-> SqlConstraintAttributesBuilder -> Bool
== :: SqlConstraintAttributesBuilder
-> SqlConstraintAttributesBuilder -> Bool
$c== :: SqlConstraintAttributesBuilder
-> SqlConstraintAttributesBuilder -> Bool
Eq)
instance Semigroup SqlConstraintAttributesBuilder where
<> :: SqlConstraintAttributesBuilder
-> SqlConstraintAttributesBuilder -> SqlConstraintAttributesBuilder
(<>) = forall a. Monoid a => a -> a -> a
mappend
instance Monoid SqlConstraintAttributesBuilder where
mempty :: SqlConstraintAttributesBuilder
mempty = Maybe ConstraintAttributeTiming
-> Maybe Bool -> SqlConstraintAttributesBuilder
SqlConstraintAttributesBuilder forall a. Maybe a
Nothing forall a. Maybe a
Nothing
mappend :: SqlConstraintAttributesBuilder
-> SqlConstraintAttributesBuilder -> SqlConstraintAttributesBuilder
mappend SqlConstraintAttributesBuilder
a SqlConstraintAttributesBuilder
b =
Maybe ConstraintAttributeTiming
-> Maybe Bool -> SqlConstraintAttributesBuilder
SqlConstraintAttributesBuilder
(SqlConstraintAttributesBuilder -> Maybe ConstraintAttributeTiming
_sqlConstraintAttributeTiming SqlConstraintAttributesBuilder
b forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> SqlConstraintAttributesBuilder -> Maybe ConstraintAttributeTiming
_sqlConstraintAttributeTiming SqlConstraintAttributesBuilder
a)
(SqlConstraintAttributesBuilder -> Maybe Bool
_sqlConstraintAttributeDeferrable SqlConstraintAttributesBuilder
b forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> SqlConstraintAttributesBuilder -> Maybe Bool
_sqlConstraintAttributeDeferrable SqlConstraintAttributesBuilder
a)
fromSqlConstraintAttributes :: SqlConstraintAttributesBuilder -> Builder
fromSqlConstraintAttributes :: SqlConstraintAttributesBuilder -> Builder
fromSqlConstraintAttributes (SqlConstraintAttributesBuilder Maybe ConstraintAttributeTiming
timing Maybe Bool
deferrable) =
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty ConstraintAttributeTiming -> Builder
timingBuilder Maybe ConstraintAttributeTiming
timing forall a. Semigroup a => a -> a -> a
<> forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty Bool -> Builder
deferrableBuilder Maybe Bool
deferrable
where timingBuilder :: ConstraintAttributeTiming -> Builder
timingBuilder ConstraintAttributeTiming
InitiallyDeferred = ByteString -> Builder
byteString ByteString
"INITIALLY DEFERRED"
timingBuilder ConstraintAttributeTiming
InitiallyImmediate = ByteString -> Builder
byteString ByteString
"INITIALLY IMMEDIATE"
deferrableBuilder :: Bool -> Builder
deferrableBuilder Bool
False = ByteString -> Builder
byteString ByteString
"NOT DEFERRABLE"
deferrableBuilder Bool
True = ByteString -> Builder
byteString ByteString
"DEFERRABLE"
sqlConstraintAttributesSerialized :: SqlConstraintAttributesBuilder -> BeamSerializedConstraintAttributes
sqlConstraintAttributesSerialized :: SqlConstraintAttributesBuilder
-> BeamSerializedConstraintAttributes
sqlConstraintAttributesSerialized (SqlConstraintAttributesBuilder Maybe ConstraintAttributeTiming
timing Maybe Bool
deferrable) =
forall a. Monoid a => [a] -> a
mconcat [ forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty forall {attrs}.
IsSql92ConstraintAttributesSyntax attrs =>
ConstraintAttributeTiming -> attrs
serializeTiming Maybe ConstraintAttributeTiming
timing
, forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty forall {attrs}.
IsSql92ConstraintAttributesSyntax attrs =>
Bool -> attrs
serializeDeferrable Maybe Bool
deferrable ]
where
serializeTiming :: ConstraintAttributeTiming -> attrs
serializeTiming ConstraintAttributeTiming
InitiallyDeferred = forall attrs. IsSql92ConstraintAttributesSyntax attrs => attrs
initiallyDeferredAttributeSyntax
serializeTiming ConstraintAttributeTiming
InitiallyImmediate = forall attrs. IsSql92ConstraintAttributesSyntax attrs => attrs
initiallyImmediateAttributeSyntax
serializeDeferrable :: Bool -> attrs
serializeDeferrable Bool
True = forall attrs. IsSql92ConstraintAttributesSyntax attrs => attrs
deferrableAttributeSyntax
serializeDeferrable Bool
False = forall attrs. IsSql92ConstraintAttributesSyntax attrs => attrs
notDeferrableAttributeSyntax
instance IsSql92ConstraintAttributesSyntax SqlConstraintAttributesBuilder where
initiallyDeferredAttributeSyntax :: SqlConstraintAttributesBuilder
initiallyDeferredAttributeSyntax = Maybe ConstraintAttributeTiming
-> Maybe Bool -> SqlConstraintAttributesBuilder
SqlConstraintAttributesBuilder (forall a. a -> Maybe a
Just ConstraintAttributeTiming
InitiallyDeferred) forall a. Maybe a
Nothing
initiallyImmediateAttributeSyntax :: SqlConstraintAttributesBuilder
initiallyImmediateAttributeSyntax = Maybe ConstraintAttributeTiming
-> Maybe Bool -> SqlConstraintAttributesBuilder
SqlConstraintAttributesBuilder (forall a. a -> Maybe a
Just ConstraintAttributeTiming
InitiallyImmediate) forall a. Maybe a
Nothing
deferrableAttributeSyntax :: SqlConstraintAttributesBuilder
deferrableAttributeSyntax = Maybe ConstraintAttributeTiming
-> Maybe Bool -> SqlConstraintAttributesBuilder
SqlConstraintAttributesBuilder forall a. Maybe a
Nothing (forall a. a -> Maybe a
Just Bool
True)
notDeferrableAttributeSyntax :: SqlConstraintAttributesBuilder
notDeferrableAttributeSyntax = Maybe ConstraintAttributeTiming
-> Maybe Bool -> SqlConstraintAttributesBuilder
SqlConstraintAttributesBuilder forall a. Maybe a
Nothing (forall a. a -> Maybe a
Just Bool
False)
instance IsSql92ColumnSchemaSyntax SqlSyntaxBuilder where
type Sql92ColumnSchemaColumnConstraintDefinitionSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92ColumnSchemaColumnTypeSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92ColumnSchemaExpressionSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
columnSchemaSyntax :: Sql92ColumnSchemaColumnTypeSyntax SqlSyntaxBuilder
-> Maybe (Sql92ColumnSchemaExpressionSyntax SqlSyntaxBuilder)
-> [Sql92ColumnSchemaColumnConstraintDefinitionSyntax
SqlSyntaxBuilder]
-> Maybe Text
-> SqlSyntaxBuilder
columnSchemaSyntax Sql92ColumnSchemaColumnTypeSyntax SqlSyntaxBuilder
type_ Maybe (Sql92ColumnSchemaExpressionSyntax SqlSyntaxBuilder)
default_ [Sql92ColumnSchemaColumnConstraintDefinitionSyntax
SqlSyntaxBuilder]
constraints Maybe Text
collation =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
SqlSyntaxBuilder -> Builder
buildSql Sql92ColumnSchemaColumnTypeSyntax SqlSyntaxBuilder
type_ forall a. Semigroup a => a -> a -> a
<>
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (\SqlSyntaxBuilder
d -> ByteString -> Builder
byteString ByteString
" DEFAULT " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql SqlSyntaxBuilder
d) Maybe (Sql92ColumnSchemaExpressionSyntax SqlSyntaxBuilder)
default_ forall a. Semigroup a => a -> a -> a
<>
(case [Sql92ColumnSchemaColumnConstraintDefinitionSyntax
SqlSyntaxBuilder]
constraints of
[] -> forall a. Monoid a => a
mempty
[Sql92ColumnSchemaColumnConstraintDefinitionSyntax
SqlSyntaxBuilder]
_ -> forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (\SqlSyntaxBuilder
c -> ByteString -> Builder
byteString ByteString
" " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql SqlSyntaxBuilder
c) [Sql92ColumnSchemaColumnConstraintDefinitionSyntax
SqlSyntaxBuilder]
constraints) forall a. Semigroup a => a -> a -> a
<>
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (\Text
nm -> ByteString -> Builder
byteString ByteString
" COLLATE " forall a. Semigroup a => a -> a -> a
<> Text -> Builder
quoteSql Text
nm) Maybe Text
collation
instance IsSql92ColumnConstraintDefinitionSyntax SqlSyntaxBuilder where
type Sql92ColumnConstraintDefinitionConstraintSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92ColumnConstraintDefinitionAttributesSyntax SqlSyntaxBuilder = SqlConstraintAttributesBuilder
constraintDefinitionSyntax :: Maybe Text
-> Sql92ColumnConstraintDefinitionConstraintSyntax SqlSyntaxBuilder
-> Maybe
(Sql92ColumnConstraintDefinitionAttributesSyntax SqlSyntaxBuilder)
-> SqlSyntaxBuilder
constraintDefinitionSyntax Maybe Text
nm Sql92ColumnConstraintDefinitionConstraintSyntax SqlSyntaxBuilder
c Maybe
(Sql92ColumnConstraintDefinitionAttributesSyntax SqlSyntaxBuilder)
attrs =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (\Text
nm' -> ByteString -> Builder
byteString ByteString
"CONSTRAINT " forall a. Semigroup a => a -> a -> a
<> Text -> Builder
quoteSql Text
nm' forall a. Semigroup a => a -> a -> a
<> ByteString -> Builder
byteString ByteString
" ") Maybe Text
nm forall a. Semigroup a => a -> a -> a
<>
SqlSyntaxBuilder -> Builder
buildSql Sql92ColumnConstraintDefinitionConstraintSyntax SqlSyntaxBuilder
c forall a. Semigroup a => a -> a -> a
<>
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty SqlConstraintAttributesBuilder -> Builder
fromSqlConstraintAttributes Maybe
(Sql92ColumnConstraintDefinitionAttributesSyntax SqlSyntaxBuilder)
attrs
instance IsSql92ColumnConstraintSyntax SqlSyntaxBuilder where
type Sql92ColumnConstraintMatchTypeSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92ColumnConstraintReferentialActionSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
type Sql92ColumnConstraintExpressionSyntax SqlSyntaxBuilder = SqlSyntaxBuilder
notNullConstraintSyntax :: SqlSyntaxBuilder
notNullConstraintSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder (ByteString -> Builder
byteString ByteString
"NOT NULL")
uniqueColumnConstraintSyntax :: SqlSyntaxBuilder
uniqueColumnConstraintSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder (ByteString -> Builder
byteString ByteString
"UNIQUE")
primaryKeyColumnConstraintSyntax :: SqlSyntaxBuilder
primaryKeyColumnConstraintSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder (ByteString -> Builder
byteString ByteString
"PRIMARY KEY")
checkColumnConstraintSyntax :: Sql92ColumnConstraintExpressionSyntax SqlSyntaxBuilder
-> SqlSyntaxBuilder
checkColumnConstraintSyntax Sql92ColumnConstraintExpressionSyntax SqlSyntaxBuilder
e = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder (Builder
"CHECK (" forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql Sql92ColumnConstraintExpressionSyntax SqlSyntaxBuilder
e forall a. Semigroup a => a -> a -> a
<> Builder
")")
referencesConstraintSyntax :: Text
-> [Text]
-> Maybe (Sql92ColumnConstraintMatchTypeSyntax SqlSyntaxBuilder)
-> Maybe
(Sql92ColumnConstraintReferentialActionSyntax SqlSyntaxBuilder)
-> Maybe
(Sql92ColumnConstraintReferentialActionSyntax SqlSyntaxBuilder)
-> SqlSyntaxBuilder
referencesConstraintSyntax Text
tbl [Text]
fields Maybe (Sql92ColumnConstraintMatchTypeSyntax SqlSyntaxBuilder)
match Maybe
(Sql92ColumnConstraintReferentialActionSyntax SqlSyntaxBuilder)
onUpdate Maybe
(Sql92ColumnConstraintReferentialActionSyntax SqlSyntaxBuilder)
onDelete =
Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder forall a b. (a -> b) -> a -> b
$
Builder
"REFERENCES " forall a. Semigroup a => a -> a -> a
<> Text -> Builder
quoteSql Text
tbl forall a. Semigroup a => a -> a -> a
<> Builder
"(" forall a. Semigroup a => a -> a -> a
<>
Builder -> [Builder] -> Builder
buildSepBy Builder
", " (forall a b. (a -> b) -> [a] -> [b]
map Text -> Builder
quoteSql [Text]
fields) forall a. Semigroup a => a -> a -> a
<> Builder
")" forall a. Semigroup a => a -> a -> a
<>
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (\SqlSyntaxBuilder
m -> Builder
" " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql SqlSyntaxBuilder
m) Maybe (Sql92ColumnConstraintMatchTypeSyntax SqlSyntaxBuilder)
match forall a. Semigroup a => a -> a -> a
<>
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (\SqlSyntaxBuilder
a -> Builder
" ON UPDATE " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql SqlSyntaxBuilder
a) Maybe
(Sql92ColumnConstraintReferentialActionSyntax SqlSyntaxBuilder)
onUpdate forall a. Semigroup a => a -> a -> a
<>
forall b a. b -> (a -> b) -> Maybe a -> b
maybe forall a. Monoid a => a
mempty (\SqlSyntaxBuilder
a -> Builder
" ON DELETE " forall a. Semigroup a => a -> a -> a
<> SqlSyntaxBuilder -> Builder
buildSql SqlSyntaxBuilder
a) Maybe
(Sql92ColumnConstraintReferentialActionSyntax SqlSyntaxBuilder)
onDelete
instance IsSql92MatchTypeSyntax SqlSyntaxBuilder where
fullMatchSyntax :: SqlSyntaxBuilder
fullMatchSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder Builder
"FULL"
partialMatchSyntax :: SqlSyntaxBuilder
partialMatchSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder Builder
"PARTIAL"
instance IsSql92ReferentialActionSyntax SqlSyntaxBuilder where
referentialActionCascadeSyntax :: SqlSyntaxBuilder
referentialActionCascadeSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder Builder
"CASCADE"
referentialActionNoActionSyntax :: SqlSyntaxBuilder
referentialActionNoActionSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder Builder
"NO ACTION"
referentialActionSetDefaultSyntax :: SqlSyntaxBuilder
referentialActionSetDefaultSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder Builder
"SET DEFAULT"
referentialActionSetNullSyntax :: SqlSyntaxBuilder
referentialActionSetNullSyntax = Builder -> SqlSyntaxBuilder
SqlSyntaxBuilder Builder
"SET NULL"
instance Sql92DisplaySyntax SqlSyntaxBuilder where
displaySyntax :: SqlSyntaxBuilder -> String
displaySyntax = ByteString -> String
BCL.unpack forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> ByteString
toLazyByteString forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlSyntaxBuilder -> Builder
buildSql