hasql wants to rowParse text not bytestring

This commit is contained in:
Joe Nelson
2014-12-06 17:42:19 -08:00
parent dcbecf085f
commit d2888c62f1
3 changed files with 15 additions and 16 deletions
+8 -4
View File
@@ -1,5 +1,5 @@
{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleContexts #-}
module App (app) where module App (runApp, app) where
import Control.Monad (join) import Control.Monad (join)
import Data.Monoid ( (<>) ) import Data.Monoid ( (<>) )
@@ -8,7 +8,7 @@ import Control.Applicative
import Control.Monad.IO.Class (liftIO, MonadIO) import Control.Monad.IO.Class (liftIO, MonadIO)
import Data.Text hiding (map) import Data.Text hiding (map)
import Data.Maybe (listToMaybe, fromMaybe) import Data.Maybe (fromMaybe)
import Text.Regex.TDFA ((=~)) import Text.Regex.TDFA ((=~))
import Data.Ord (comparing) import Data.Ord (comparing)
import Data.Ranged.Ranges (emptyRange) import Data.Ranged.Ranges (emptyRange)
@@ -33,6 +33,10 @@ import RangeQuery
import PgStructure import PgStructure
import Auth import Auth
runApp :: H.Postgres -> H.SessionSettings -> Application
runApp pg sess req respond =
respond =<< H.session pg sess (app req)
app :: Request -> H.Session H.Postgres IO Response app :: Request -> H.Session H.Postgres IO Response
app req = app req =
case (path, verb) of case (path, verb) of
@@ -64,9 +68,9 @@ app req =
. whereT qq . whereT qq
$ selectStar qt $ selectStar qt
) )
row <- H.tx Nothing $ listToMaybe <$> H.list select row <- H.tx Nothing $ H.single select
let (tableTotal, queryTotal, body) = let (tableTotal, queryTotal, body) =
fromMaybe (0, 0, Just "" :: Maybe ByteString) row fromMaybe (0, 0, Just "" :: Maybe Text) row
from = fromMaybe 0 $ rangeOffset <$> range from = fromMaybe 0 $ rangeOffset <$> range
to = from+queryTotal to = from+queryTotal
contentRange = contentRangeH from to tableTotal contentRange = contentRangeH from to tableTotal
+6 -11
View File
@@ -8,7 +8,6 @@ import Middleware
import Control.Monad (unless) import Control.Monad (unless)
import Data.String.Conversions (cs) import Data.String.Conversions (cs)
import Network.Wai
import Network.Wai.Middleware.Cors (cors) import Network.Wai.Middleware.Cors (cors)
import Network.Wai.Handler.Warp hiding (Connection) import Network.Wai.Handler.Warp hiding (Connection)
import Network.Wai.Middleware.Gzip (gzip, def) import Network.Wai.Middleware.Gzip (gzip, def)
@@ -32,26 +31,22 @@ main = do
Prelude.putStrLn $ "Listening on port " ++ (show $ configPort conf :: String) Prelude.putStrLn $ "Listening on port " ++ (show $ configPort conf :: String)
let pgSettings = H.Postgres "localhost" 5432 "postgres" "" "postgres" let pgSettings = H.Postgres "localhost" 5432 "dbapi_test" "" "dbapi_test"
sessSettings <- maybe (fail "Improper session settings") return $ sessSettings <- maybe (fail "Improper session settings") return $
H.sessionSettings 6 30 H.sessionSettings 95 30
let settings = setPort port let appSettings = setPort port
. setServerName (cs $ "dbapi/" <> prettyVersion) . setServerName (cs $ "dbapi/" <> prettyVersion)
$ defaultSettings $ defaultSettings
middle = middle =
(if configSecure conf then redirectInsecure else id) (if configSecure conf then redirectInsecure else id)
. gzip def . cors corsPolicy . clientErrors . gzip def . cors corsPolicy . clientErrors
. staticPolicy (only [("favicon.ico", "static/favicon.ico")]) in . staticPolicy (only [("favicon.ico", "static/favicon.ico")]) in
runSettings settings $ middle (runApp pgSettings sessSettings) runSettings appSettings $ middle (runApp pgSettings sessSettings)
-- . authenticated (cs $ configAnonRole conf) $ app -- . authenticated (cs $ configAnonRole conf) $ app
where where
describe = progDesc "create a REST API to an existing Postgres database" describe = progDesc "create a REST API to an existing Postgres database"
prettyVersion = intercalate "." $ map show $ versionBranch version prettyVersion = intercalate "." $ map show $ versionBranch version
runApp :: H.Postgres -> H.SessionSettings -> Application
runApp pg sess req respond =
respond =<< H.session pg sess (app req)
+1 -1
View File
@@ -74,7 +74,7 @@ countRows t =
asJsonWithCount :: StatementT asJsonWithCount :: StatementT
asJsonWithCount (sql, params) = ( asJsonWithCount (sql, params) = (
"count(t), array_to_json(array_agg(row_to_json(t)))::character varying from (" <> sql <> ") t" "count(t), array_to_json(array_agg(row_to_json(t)))::character varying from (" <> sql <> ") t"
, params , params
) )