Fix where clause, add count in headers
This commit is contained in:
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user