packages feed

algebra-sql-0.1.0.0: src/Database/Algebra/SQL/Render.hs

-- | This mdoule provides efficient functions to render lists of queries.
module Database.Algebra.SQL.Render
    ( debugTransformResult
    , renderCompact
    , renderPretty
    , renderPlain
    ) where

import qualified Text.PrettyPrint.ANSI.Leijen as L
    ( Doc
    , SimpleDoc
    , plain
    , displayS
    , renderPretty
    , renderCompact
    )

import Database.Algebra.SQL.Query (Query)
import Database.Algebra.SQL.Render.Query (renderQuery)
import Database.Algebra.SQL.Render.Tile (renderTransformResult)
import Database.Algebra.SQL.Tile (TransformResult)
import Database.Algebra.SQL.Compatibility

renderPrettySimpleDoc :: L.Doc -> L.SimpleDoc
renderPrettySimpleDoc =
    L.renderPretty 0.8 80

renderWith :: (L.Doc -> L.SimpleDoc) -> CompatMode -> Query -> ShowS
renderWith f c = L.displayS . f . renderQuery c


-- | Returns a 'ShowS' containing debug information for a transform result.
debugTransformResult :: CompatMode -> TransformResult -> ShowS
debugTransformResult compat =
    L.displayS . renderPrettySimpleDoc . (renderTransformResult compat)

-- | Renders a list of queries in an ugly but fast way, feasible as direct SQL
-- input.
renderCompact :: CompatMode -> [Query] -> [ShowS]
renderCompact c = map $ renderWith L.renderCompact c

-- | Renders a list of queries in a beautiful way.
renderPretty :: CompatMode -> [Query] -> [ShowS]
renderPretty c = map $ renderWith renderPrettySimpleDoc c

-- | Renders a list of queries without colors but formatted.
renderPlain :: CompatMode -> [Query] -> [ShowS]
renderPlain c = map $ renderWith (renderPrettySimpleDoc . L.plain) c