>
> module Database.Dawdle.PrettyPrint
> (pretty)
> where
> import Database.Dawdle.Types
> import Text.PrettyPrint
TODO: Add different syntax support (ANSI/Oracle/Microsoft/PostgreSQL,...)
>
> pretty :: String
> -> [String]
> -> [CellType]
> -> String
> pretty fn colns = render . ddl fn colns
>
> ddl :: String -> [String] -> [CellType] -> Doc
> ddl fn colns cts = text "create table" <+> text fn <+> body
> where
> body = parens $ nest 3 $ vcat $ punctuate comma clnms
> clnms = zipWith (\a b -> text a <+> b) colns $ map (prettyTypes True) cts
>
> prettyTypes :: Bool -> CellType -> Doc
> prettyTypes isNullPass = \case
> Nullable c -> prettyTypes False c <+> text "null"
> CTBool -> intp $ text "bool"
> CTInt8 -> intp $ text "tinyint"
> CTInt16 -> intp $ text "smallint"
> CTInt32 -> intp $ text "int"
> CTInt64 -> intp $ text "bigint"
> CTFloat -> intp $ text "real"
> CTDouble -> intp $ text "float"
> CTDate _ -> intp $ text "date"
> CTDateTime _ -> intp $ text "datetime"
> CTChar i -> intp $ text "varchar" <> (parens (int i))
> Unknown -> intp $ text "!!UNKNOWN!!"
> where
> intp tn = if isNullPass
> then tn <+> text "not null"
> else tn