Greater type safety for OrderTerm
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user