Fix where clause, add count in headers

This commit is contained in:
Joe Nelson
2014-08-03 11:26:02 -07:00
parent c278a78edf
commit eb126ab49f
2 changed files with 17 additions and 9 deletions
+8 -2
View File
@@ -70,12 +70,11 @@ app config req respond = do
([table], "GET") -> ([table], "GET") ->
if range == Just emptyRange if range == Just emptyRange
then return $ responseLBS status416 [] "HTTP Range error" then return $ responseLBS status416 [] "HTTP Range error"
else responseLBS status200 [json] . rrBody <$> else respondWithRangedResult <$>
(getRows (show ver) (unpack table) qq range =<< conn) (getRows (show ver) (unpack table) qq range =<< conn)
(_, _) -> (_, _) ->
return $ responseLBS status404 [] "" return $ responseLBS status404 [] ""
respond $ either sqlErrorHandler id r respond $ either sqlErrorHandler id r
where where
@@ -87,6 +86,13 @@ app config req respond = do
ver = fromMaybe 1 $ requestedVersion (requestHeaders req) ver = fromMaybe 1 $ requestedVersion (requestHeaders req)
range = requestedRange (requestHeaders req) range = requestedRange (requestHeaders req)
respondWithRangedResult :: RangedResult -> Response
respondWithRangedResult rr =
responseLBS status206 [json, ("Content-Range", "*/" <> (BS.pack . show . rrTotal) rr)] (rrBody rr)
where
json = (hContentType, "application/json")
requestedVersion :: RequestHeaders -> Maybe Int requestedVersion :: RequestHeaders -> Maybe Int
requestedVersion hdrs = requestedVersion hdrs =
case verStr of case verStr of
+9 -7
View File
@@ -36,14 +36,16 @@ getRows schema table qq range conn = do
$ selectStarClause schema table $ selectStarClause schema table
<> whereClause qq <> whereClause qq
<> limitClause range <> limitClause range
count <- populateSql conn
$ selectCountClause schema table
<> whereClause qq
r <- quickQuery conn query [] r <- quickQuery conn query []
[[n]] <- quickQuery conn count []
let body = case r of return $ case r of
[[SqlNull]] -> "[]" [[SqlNull]] -> RangedResult 0 0 0 ""
[[json]] -> fromSql json [[json]] -> RangedResult 0 0 (fromSql n) (fromSql json)
_ -> "" _ -> RangedResult 0 0 0 ""
return $ RangedResult 0 0 0 body
whereClause :: Net.Query -> QuotedSql whereClause :: Net.Query -> QuotedSql
whereClause qs = whereClause qs =
@@ -55,7 +57,7 @@ whereClause qs =
wherePred :: Net.QueryItem -> QuotedSql wherePred :: Net.QueryItem -> QuotedSql
wherePred (column, predicate) = wherePred (column, predicate) =
("t.%I " <> op <> "%L", map toSql [column, value]) ("%I " <> op <> "%L", map toSql [column, value])
where where
opCode:rest = BS.split ':' $ fromMaybe "" predicate opCode:rest = BS.split ':' $ fromMaybe "" predicate