module Database.Narc.SQL.Pretty where
import Database.Narc.Pretty
import Database.Narc.SQL
import Database.Narc.Util (mapstrcat)
instance Pretty Query where
pretty (Select{rslt=flds, tabs=tabs, cond=cond}) =
"select " ++ mapstrcat ", " (\(alias, expr) ->
pretty expr ++ " as " ++ alias)
flds ++
(if null tabs then "" else
" from " ++ mapstrcat ", " (\(name, al, ty) -> name ++ " as " ++ al)
tabs) ++
" where " ++ pretty_cond cond
where pretty_cond [] = "true"
pretty_cond cond = mapstrcat " and " pretty cond
pretty (Union a b) = pretty a ++ " union all " ++ pretty b
instance Pretty QBase where
pretty (Lit lit) = pretty lit
pretty (Field a b) = a ++ "." ++ b
pretty (Not b) = "not " ++ pretty b
pretty (Op lhs op rhs) = pretty lhs ++ pretty op ++ pretty rhs
pretty (If c t f) = "if " ++ pretty c ++ " then " ++ pretty t
++ " else " ++ pretty f
pretty (Exists q) = "exists (" ++ pretty q ++ ")"
instance Pretty DataItem where
pretty (Num n) = show n
pretty (String s) = show s
pretty (Bool True) = "true"
pretty (Bool False) = "false"
instance Pretty Op where
pretty Plus = " + "
pretty Minus = " - "
pretty Times = " * "
pretty Divide = " / "
pretty Eq = " = "
pretty Less = " < "