Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
ca8e7d4f
Commit
ca8e7d4f
authored
Jan 29, 2013
by
antirez
Browse files
Generate del events when S*STORE commands delete the destination key.
parent
664de412
Changes
1
Hide whitespace changes
Inline
Side-by-side
src/t_set.c
View file @
ca8e7d4f
...
@@ -706,7 +706,7 @@ void sinterGenericCommand(redisClient *c, robj **setkeys, unsigned long setnum,
...
@@ -706,7 +706,7 @@ void sinterGenericCommand(redisClient *c, robj **setkeys, unsigned long setnum,
if
(
dstkey
)
{
if
(
dstkey
)
{
/* Store the resulting set into the target, if the intersection
/* Store the resulting set into the target, if the intersection
* is not an empty set. */
* is not an empty set. */
dbDelete
(
c
->
db
,
dstkey
);
int
deleted
=
dbDelete
(
c
->
db
,
dstkey
);
if
(
setTypeSize
(
dstset
)
>
0
)
{
if
(
setTypeSize
(
dstset
)
>
0
)
{
dbAdd
(
c
->
db
,
dstkey
,
dstset
);
dbAdd
(
c
->
db
,
dstkey
,
dstset
);
addReplyLongLong
(
c
,
setTypeSize
(
dstset
));
addReplyLongLong
(
c
,
setTypeSize
(
dstset
));
...
@@ -715,6 +715,9 @@ void sinterGenericCommand(redisClient *c, robj **setkeys, unsigned long setnum,
...
@@ -715,6 +715,9 @@ void sinterGenericCommand(redisClient *c, robj **setkeys, unsigned long setnum,
}
else
{
}
else
{
decrRefCount
(
dstset
);
decrRefCount
(
dstset
);
addReply
(
c
,
shared
.
czero
);
addReply
(
c
,
shared
.
czero
);
if
(
deleted
)
notifyKeyspaceEvent
(
REDIS_NOTIFY_GENERIC
,
"del"
,
dstkey
,
c
->
db
->
id
);
}
}
signalModifiedKey
(
c
->
db
,
dstkey
);
signalModifiedKey
(
c
->
db
,
dstkey
);
server
.
dirty
++
;
server
.
dirty
++
;
...
@@ -873,7 +876,7 @@ void sunionDiffGenericCommand(redisClient *c, robj **setkeys, int setnum, robj *
...
@@ -873,7 +876,7 @@ void sunionDiffGenericCommand(redisClient *c, robj **setkeys, int setnum, robj *
}
else
{
}
else
{
/* If we have a target key where to store the resulting set
/* If we have a target key where to store the resulting set
* create this key with the result set inside */
* create this key with the result set inside */
dbDelete
(
c
->
db
,
dstkey
);
int
deleted
=
dbDelete
(
c
->
db
,
dstkey
);
if
(
setTypeSize
(
dstset
)
>
0
)
{
if
(
setTypeSize
(
dstset
)
>
0
)
{
dbAdd
(
c
->
db
,
dstkey
,
dstset
);
dbAdd
(
c
->
db
,
dstkey
,
dstset
);
addReplyLongLong
(
c
,
setTypeSize
(
dstset
));
addReplyLongLong
(
c
,
setTypeSize
(
dstset
));
...
@@ -883,6 +886,9 @@ void sunionDiffGenericCommand(redisClient *c, robj **setkeys, int setnum, robj *
...
@@ -883,6 +886,9 @@ void sunionDiffGenericCommand(redisClient *c, robj **setkeys, int setnum, robj *
}
else
{
}
else
{
decrRefCount
(
dstset
);
decrRefCount
(
dstset
);
addReply
(
c
,
shared
.
czero
);
addReply
(
c
,
shared
.
czero
);
if
(
deleted
)
notifyKeyspaceEvent
(
REDIS_NOTIFY_GENERIC
,
"del"
,
dstkey
,
c
->
db
->
id
);
}
}
signalModifiedKey
(
c
->
db
,
dstkey
);
signalModifiedKey
(
c
->
db
,
dstkey
);
server
.
dirty
++
;
server
.
dirty
++
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment