Skip to content

Commit a00878b

Browse files
committed
add redis sismember
1 parent 3022329 commit a00878b

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

nri-redis/src/Redis/Handler.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -305,6 +305,10 @@ doRawQuery query =
305305
Database.Redis.srem (toB key) (NonEmpty.toList vals)
306306
|> PreparedQuery
307307
|> map (Ok << Prelude.fromIntegral)
308+
Internal.Sismember key val ->
309+
Database.Redis.sismember (toB key) val
310+
|> PreparedQuery
311+
|> map Ok
308312
Internal.Smembers key ->
309313
Database.Redis.smembers (toB key)
310314
|> PreparedQuery

nri-redis/src/Redis/Internal.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ cmds query'' =
111111
Sadd key vals -> [unwords ("SADD" : key : List.map (\_ -> "*****") (NonEmpty.toList vals))]
112112
Scard key -> [unwords ["SCARD", key]]
113113
Srem key vals -> [unwords ("SREM" : key : List.map (\_ -> "*****") (NonEmpty.toList vals))]
114+
Sismember key _ -> [unwords ["SISMEMBER", key , "*****"]]
114115
Smembers key -> [unwords ["SMEMBERS", key]]
115116
Zadd key vals -> [unwords ("ZADD" : key : List.concatMap (\(_, val) -> ["*****", Text.fromFloat val]) (Dict.toList vals))]
116117
Zrange key start stop -> [unwords ["ZRANGE", key, Text.fromInt start, Text.fromInt stop]]
@@ -167,6 +168,7 @@ data Query a where
167168
Sadd :: Text -> NonEmpty ByteString -> Query Int
168169
Scard :: Text -> Query Int
169170
Srem :: Text -> NonEmpty ByteString -> Query Int
171+
Sismember :: Text -> ByteString -> Query Bool
170172
Smembers :: Text -> Query (List ByteString)
171173
Zadd :: Text -> Dict.Dict ByteString Float -> Query Int
172174
Zrange :: Text -> Int -> Int -> Query [ByteString]
@@ -312,6 +314,7 @@ mapKeys fn query' =
312314
Sadd key vals -> Task.map (\newKey -> Sadd newKey vals) (fn key)
313315
Scard key -> Task.map Scard (fn key)
314316
Srem key vals -> Task.map (\newKey -> Srem newKey vals) (fn key)
317+
Sismember key val -> Task.map (\newKey -> Sismember newKey val) (fn key)
315318
Smembers key -> Task.map Smembers (fn key)
316319
Zadd key vals -> Task.map (\newKey -> Zadd newKey vals) (fn key)
317320
Zrange key start stop -> Task.map (\newKey -> Zrange newKey start stop) (fn key)
@@ -354,6 +357,7 @@ mapReturnedKeys fn query' =
354357
Sadd key vals -> Sadd key vals
355358
Scard key -> Scard key
356359
Srem key vals -> Srem key vals
360+
Sismember key val -> Sismember key val
357361
Smembers key -> Smembers key
358362
Zadd key vals -> Zadd key vals
359363
Zrange key start stop -> Zrange key start stop
@@ -411,6 +415,7 @@ keysTouchedByQuery query' =
411415
Sadd key _ -> Set.singleton key
412416
Scard key -> Set.singleton key
413417
Srem key _ -> Set.singleton key
418+
Sismember key _ -> Set.singleton key
414419
Smembers key -> Set.singleton key
415420
Zadd key _ -> Set.singleton key
416421
Zrange key _ _ -> Set.singleton key

nri-redis/src/Redis/Set.hs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ module Redis.Set
2929
sadd,
3030
scard,
3131
srem,
32+
sismember,
3233
smembers,
3334

3435
-- * Running Redis queries
@@ -103,7 +104,11 @@ data Api key a = Api
103104
-- | Returns all the members of the set value stored at key.
104105
--
105106
-- https://redis.io/commands/smembers
106-
smembers :: key -> Internal.Query (Set.Set a)
107+
smembers :: key -> Internal.Query (Set.Set a),
108+
-- | Returns if member is a member of the set stored at key.
109+
--
110+
-- https://redis.io/docs/latest/commands/sismember/
111+
sismember :: key -> a -> Internal.Query Bool
107112
}
108113

109114
-- | Creates a json API mapping a 'key' to a json-encodable-decodable type
@@ -148,5 +153,8 @@ makeApi Codec.Codec {Codec.codecEncoder, Codec.codecDecoder} toKey =
148153
smembers = \key ->
149154
Internal.Smembers (toKey key)
150155
|> Internal.WithResult (Prelude.traverse codecDecoder)
151-
|> Internal.map Set.fromList
156+
|> Internal.map Set.fromList,
157+
sismember = \key val->
158+
Internal.Sismember (toKey key) (codecEncoder val)
159+
152160
}

0 commit comments

Comments
 (0)