git.iko.soy/typeable/bloodhound
on master help sign in
range newtypes
9373817Alex K
src/Database/Bloodhound/Types.hs+50−32
@@ -72,6 +72,14 @@ module Database.Bloodhound.Types
72 , Regexp(..)
72 , Regexp(..)
73 , RegexpFlags(..)
73 , RegexpFlags(..)
74 , RegexpFlag(..)
74 , RegexpFlag(..)
75+ , LessThan(..)
76+ , LessThanEq(..)
77+ , GreaterThan(..)
78+ , GreaterThanEq(..)
79+ , LessThanD(..)
80+ , LessThanEqD(..)
81+ , GreaterThanD(..)
82+ , GreaterThanEqD(..)
75 , FieldName(..)
83 , FieldName(..)
76 , IndexName(..)
84 , IndexName(..)
77 , MappingName(..)
85 , MappingName(..)
@@ -938,42 +946,52 @@ data RegexpFlag = AnyString
938 | Intersection
946 | Intersection
939 | Interval deriving (Eq, Show)
947 | Interval deriving (Eq, Show)
940
948
949+newtype LessThan = LessThan Double deriving (Eq, Show)
950+newtype LessThanEq = LessThanEq Double deriving (Eq, Show)
951+newtype GreaterThan = GreaterThan Double deriving (Eq, Show)
952+newtype GreaterThanEq = GreaterThanEq Double deriving (Eq, Show)
953+
954+newtype LessThanD = LessThanD UTCTime deriving (Eq, Show)
955+newtype LessThanEqD = LessThanEqD UTCTime deriving (Eq, Show)
956+newtype GreaterThanD = GreaterThanD UTCTime deriving (Eq, Show)
957+newtype GreaterThanEqD = GreaterThanEqD UTCTime deriving (Eq, Show)
958+
941−data RangeValue = RangeDateLte UTCTime
959+data RangeValue = RangeDateLte LessThanEqD
942− | RangeDateLt UTCTime
960+ | RangeDateLt LessThanD
943− | RangeDateGte UTCTime
961+ | RangeDateGte GreaterThanEqD
944− | RangeDateGt UTCTime
962+ | RangeDateGt GreaterThanD
945− | RangeDateGtLt UTCTime UTCTime
963+ | RangeDateGtLt GreaterThanD LessThanD
946− | RangeDateGteLte UTCTime UTCTime
964+ | RangeDateGteLte GreaterThanEqD LessThanEqD
947− | RangeDateGteLt UTCTime UTCTime
965+ | RangeDateGteLt GreaterThanEqD LessThanD
948− | RangeDateGtLte UTCTime UTCTime
966+ | RangeDateGtLte GreaterThanD LessThanEqD
949− | RangeDoubleLte Double
967+ | RangeDoubleLte LessThanEq
950− | RangeDoubleLt Double
968+ | RangeDoubleLt LessThan
951− | RangeDoubleGte Double
969+ | RangeDoubleGte GreaterThanEq
952− | RangeDoubleGt Double
970+ | RangeDoubleGt GreaterThan
953− | RangeDoubleGtLt Double Double
971+ | RangeDoubleGtLt GreaterThan LessThan
954− | RangeDoubleGteLte Double Double
972+ | RangeDoubleGteLte GreaterThanEq LessThanEq
955− | RangeDoubleGteLt Double Double
973+ | RangeDoubleGteLt GreaterThanEq LessThan
956− | RangeDoubleGtLte Double Double
974+ | RangeDoubleGtLte GreaterThan LessThanEq
957 deriving (Eq, Show)
975 deriving (Eq, Show)
958
976
959rangeValueToPair :: RangeValue -> [Pair]
977rangeValueToPair :: RangeValue -> [Pair]
960rangeValueToPair rv = case rv of
978rangeValueToPair rv = case rv of
961− RangeDateLte t -> ["lte" .= t]
979+ RangeDateLte (LessThanEqD t) -> ["lte" .= t]
962− RangeDateGte t -> ["gte" .= t]
980+ RangeDateGte (GreaterThanEqD t) -> ["gte" .= t]
963− RangeDateLt t -> ["lt" .= t]
981+ RangeDateLt (LessThanD t) -> ["lt" .= t]
964− RangeDateGt t -> ["gt" .= t]
982+ RangeDateGt (GreaterThanD t) -> ["gt" .= t]
965− RangeDateGteLte l g -> ["gte" .= l, "lte" .= g]
983+ RangeDateGteLte (GreaterThanEqD l) (LessThanEqD g) -> ["gte" .= l, "lte" .= g]
966− RangeDateGtLte l g -> ["gt" .= l, "lte" .= g]
984+ RangeDateGtLte (GreaterThanD l) (LessThanEqD g) -> ["gt" .= l, "lte" .= g]
967− RangeDateGteLt l g -> ["gte" .= l, "lt" .= g]
985+ RangeDateGteLt (GreaterThanEqD l) (LessThanD g) -> ["gte" .= l, "lt" .= g]
968− RangeDateGtLt l g -> ["gt" .= l, "lt" .= g]
986+ RangeDateGtLt (GreaterThanD l) (LessThanD g) -> ["gt" .= l, "lt" .= g]
969− RangeDoubleLte t -> ["lte" .= t]
987+ RangeDoubleLte (LessThanEq t) -> ["lte" .= t]
970− RangeDoubleGte t -> ["gte" .= t]
988+ RangeDoubleGte (GreaterThanEq t) -> ["gte" .= t]
971− RangeDoubleLt t -> ["lt" .= t]
989+ RangeDoubleLt (LessThan t) -> ["lt" .= t]
972− RangeDoubleGt t -> ["gt" .= t]
990+ RangeDoubleGt (GreaterThan t) -> ["gt" .= t]
973− RangeDoubleGteLte l g -> ["gte" .= l, "lte" .= g]
991+ RangeDoubleGteLte (GreaterThanEq l) (LessThanEq g) -> ["gte" .= l, "lte" .= g]
974− RangeDoubleGtLte l g -> ["gt" .= l, "lte" .= g]
992+ RangeDoubleGtLte (GreaterThan l) (LessThanEq g) -> ["gt" .= l, "lte" .= g]
975− RangeDoubleGteLt l g -> ["gte" .= l, "lt" .= g]
993+ RangeDoubleGteLt (GreaterThanEq l) (LessThan g) -> ["gte" .= l, "lt" .= g]
976− RangeDoubleGtLt l g -> ["gt" .= l, "lt" .= g]
994+ RangeDoubleGtLt (GreaterThan l) (LessThan g) -> ["gt" .= l, "lt" .= g]
977
995
978data Term = Term { termField :: Text
996data Term = Term { termField :: Text
979 , termValue :: Text } deriving (Eq, Show)
997 , termValue :: Text } deriving (Eq, Show)
tests/tests.hs+7−7
@@ -435,7 +435,7 @@ main = hspec $ do
435 it "returns document for Double range filter" $ do
435 it "returns document for Double range filter" $ do
436 _ <- insertData
436 _ <- insertData
437 let filter = RangeFilter (FieldName "age")
437 let filter = RangeFilter (FieldName "age")
438− (RangeDoubleGtLt 1000.0 100000.0)
438+ (RangeDoubleGtLt (GreaterThan 1000.0) (LessThan 100000.0))
439 RangeExecutionIndex False
439 RangeExecutionIndex False
440 let search = mkSearch Nothing (Just filter)
440 let search = mkSearch Nothing (Just filter)
441 myTweet <- searchTweet search
441 myTweet <- searchTweet search
@@ -445,12 +445,12 @@ main = hspec $ do
445 _ <- insertData
445 _ <- insertData
446 let filter = RangeFilter (FieldName "postDate")
446 let filter = RangeFilter (FieldName "postDate")
447 (RangeDateGtLt
447 (RangeDateGtLt
448− (UTCTime
448+ (GreaterThanD (UTCTime
449− (ModifiedJulianDay 55000)
449+ (ModifiedJulianDay 55000)
450− (secondsToDiffTime 9))
450+ (secondsToDiffTime 9)))
451− (UTCTime
451+ (LessThanD (UTCTime
452− (ModifiedJulianDay 55000)
452+ (ModifiedJulianDay 55000)
453− (secondsToDiffTime 11)))
453+ (secondsToDiffTime 11))))
454 RangeExecutionIndex False
454 RangeExecutionIndex False
455 let search = mkSearch Nothing (Just filter)
455 let search = mkSearch Nothing (Just filter)
456 myTweet <- searchTweet search
456 myTweet <- searchTweet search