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 try ( do
c <- pFieldName c <- pFieldName
_ <- pDelimiter _ <- pDelimiter
d <- string "asc" <|> string "desc" d <- (string "asc" *> pure OrderAsc)
nls <- optionMaybe (pDelimiter *> ( try(string "nullslast" *> pure ("nulls last"::String)) <|> try(string "nullsfirst" *> pure ("nulls first"::String)))) <|> (string "desc" *> pure OrderDesc)
return $ OrderTerm (cs c) (cs d) (cs <$> nls) 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 :: OrderTerm -> Text
queryTerm t = " " queryTerm t = " "
<> cs (pgFmtIdent $ otTerm t) <> " " <> cs (pgFmtIdent $ otTerm t) <> " "
<> cs (otDirection t) <> " " <> sqlOrderDirection (otDirection t) <> " "
<> maybe "" cs (otNullOrder 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.Value -> SqlFragment
insertableValue JSON.Null = "null" insertableValue JSON.Null = "null"
+6 -4
View File
@@ -1,8 +1,7 @@
module PostgREST.Types where module PostgREST.Types where
import Data.Text import Data.Text
import Data.Tree 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.Aeson
import Data.Map import Data.Map
@@ -51,10 +50,13 @@ data PrimaryKey = PrimaryKey {
, pkName :: Text , pkName :: Text
} deriving (Show, Eq) } deriving (Show, Eq)
data OrderDirection = OrderAsc | OrderDesc deriving (Show, Eq)
data OrderNulls = OrderNullsFirst | OrderNullsLast deriving (Show, Eq)
data OrderTerm = OrderTerm { data OrderTerm = OrderTerm {
otTerm :: Text otTerm :: Text
, otDirection :: BS.ByteString , otDirection :: OrderDirection
, otNullOrder :: Maybe BS.ByteString , otNullOrder :: Maybe OrderNulls
} deriving (Show, Eq) } deriving (Show, Eq)
data QualifiedIdentifier = QualifiedIdentifier { data QualifiedIdentifier = QualifiedIdentifier {