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