Greater type safety for OrderTerm

This commit is contained in:
Joe Nelson
2015-11-19 11:21:27 -08:00
parent f3d5759c1a
commit b6a58935f3
3 changed files with 28 additions and 10 deletions
+8 -4
View File
@@ -101,8 +101,12 @@ pOrderTerm =
try ( do
c <- pFieldName
_ <- pDelimiter
d <- string "asc" <|> string "desc"
nls <- optionMaybe (pDelimiter *> ( try(string "nullslast" *> pure ("nulls last"::String)) <|> try(string "nullsfirst" *> pure ("nulls first"::String))))
return $ OrderTerm (cs c) (cs d) (cs <$> nls)
d <- (string "asc" *> pure OrderAsc)
<|> (string "desc" *> pure OrderDesc)
nls <- optionMaybe (pDelimiter *> (
try(string "nullslast" *> pure OrderNullsLast)
<|> try(string "nullsfirst" *> pure OrderNullsFirst)
))
return $ OrderTerm c d nls
)
<|> OrderTerm <$> (cs <$> pFieldName) <*> pure "asc" <*> pure Nothing
<|> OrderTerm <$> (cs <$> pFieldName) <*> pure OrderAsc <*> pure Nothing
+14 -2
View File
@@ -321,8 +321,20 @@ orderF ts =
queryTerm :: OrderTerm -> Text
queryTerm t = " "
<> cs (pgFmtIdent $ otTerm t) <> " "
<> cs (otDirection t) <> " "
<> maybe "" cs (otNullOrder t) <> " "
<> sqlOrderDirection (otDirection t) <> " "
<> maybe "" sqlOrderNulls (otNullOrder t) <> " "
sqlOrderDirection :: OrderDirection -> SqlFragment
sqlOrderDirection d =
case d of
OrderDesc -> "desc"
OrderAsc -> "asc"
sqlOrderNulls :: OrderNulls -> SqlFragment
sqlOrderNulls d =
case d of
OrderNullsFirst -> "nulls first"
OrderNullsLast -> "nulls last"
insertableValue :: JSON.Value -> SqlFragment
insertableValue JSON.Null = "null"
+6 -4
View File
@@ -1,8 +1,7 @@
module PostgREST.Types where
import Data.Text
import Data.Tree
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString.Lazy as BL
import Data.Aeson
import Data.Map
@@ -51,10 +50,13 @@ data PrimaryKey = PrimaryKey {
, pkName :: Text
} deriving (Show, Eq)
data OrderDirection = OrderAsc | OrderDesc deriving (Show, Eq)
data OrderNulls = OrderNullsFirst | OrderNullsLast deriving (Show, Eq)
data OrderTerm = OrderTerm {
otTerm :: Text
, otDirection :: BS.ByteString
, otNullOrder :: Maybe BS.ByteString
, otDirection :: OrderDirection
, otNullOrder :: Maybe OrderNulls
} deriving (Show, Eq)
data QualifiedIdentifier = QualifiedIdentifier {