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
4a183528
Commit
4a183528
authored
Sep 22, 2015
by
antirez
Browse files
Lazyfree: Hash converted to use plain SDS WIP 3.
parent
777396ae
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/db.c
View file @
4a183528
...
@@ -418,10 +418,10 @@ void scanCallback(void *privdata, const dictEntry *de) {
...
@@ -418,10 +418,10 @@ void scanCallback(void *privdata, const dictEntry *de) {
sds
keysds
=
dictGetKey
(
de
);
sds
keysds
=
dictGetKey
(
de
);
key
=
createStringObject
(
keysds
,
sdslen
(
keysds
));
key
=
createStringObject
(
keysds
,
sdslen
(
keysds
));
}
else
if
(
o
->
type
==
OBJ_HASH
)
{
}
else
if
(
o
->
type
==
OBJ_HASH
)
{
key
=
dictGetKey
(
de
);
sds
sds
key
=
dictGetKey
(
de
);
incrRefCount
(
key
);
sds
sdsval
=
dictGetVal
(
de
);
val
=
dictGetVal
(
de
);
key
=
createStringObject
(
keysds
,
sdslen
(
keysds
)
);
incrRefCount
(
val
);
val
=
createStringObject
(
valsds
,
sdslen
(
valsds
)
);
}
else
if
(
o
->
type
==
OBJ_ZSET
)
{
}
else
if
(
o
->
type
==
OBJ_ZSET
)
{
sds
keysds
=
dictGetKey
(
de
);
sds
keysds
=
dictGetKey
(
de
);
key
=
createStringObject
(
keysds
,
sdslen
(
keysds
));
key
=
createStringObject
(
keysds
,
sdslen
(
keysds
));
...
...
src/t_hash.c
View file @
4a183528
...
@@ -545,8 +545,6 @@ void hincrbyCommand(client *c) {
...
@@ -545,8 +545,6 @@ void hincrbyCommand(client *c) {
server
.
dirty
++
;
server
.
dirty
++
;
}
}
/* XXX From here. */
void
hincrbyfloatCommand
(
client
*
c
)
{
void
hincrbyfloatCommand
(
client
*
c
)
{
double
value
,
incr
;
double
value
,
incr
;
long
long
ll
;
long
long
ll
;
...
@@ -593,7 +591,9 @@ void hincrbyfloatCommand(client *c) {
...
@@ -593,7 +591,9 @@ void hincrbyfloatCommand(client *c) {
decrRefCount
(
newobj
);
decrRefCount
(
newobj
);
}
}
static
void
addHashFieldToReply
(
client
*
c
,
robj
*
o
,
robj
*
field
)
{
/* XXX From here. */
static
void
addHashFieldToReply
(
client
*
c
,
robj
*
o
,
sds
field
)
{
int
ret
;
int
ret
;
if
(
o
==
NULL
)
{
if
(
o
==
NULL
)
{
...
@@ -618,15 +618,11 @@ static void addHashFieldToReply(client *c, robj *o, robj *field) {
...
@@ -618,15 +618,11 @@ static void addHashFieldToReply(client *c, robj *o, robj *field) {
}
}
}
else
if
(
o
->
encoding
==
OBJ_ENCODING_HT
)
{
}
else
if
(
o
->
encoding
==
OBJ_ENCODING_HT
)
{
robj
*
value
;
sds
value
=
hashTypeGetFromHashTable
(
o
,
field
);
if
(
value
==
NULL
)
ret
=
hashTypeGetFromHashTable
(
o
,
field
,
&
value
);
if
(
ret
<
0
)
{
addReply
(
c
,
shared
.
nullbulk
);
addReply
(
c
,
shared
.
nullbulk
);
}
else
{
else
addReplyBulk
(
c
,
value
);
addReplyBulkCBuffer
(
c
,
value
,
sdslen
(
value
));
}
}
else
{
}
else
{
serverPanic
(
"Unknown hash encoding"
);
serverPanic
(
"Unknown hash encoding"
);
}
}
...
@@ -638,7 +634,7 @@ void hgetCommand(client *c) {
...
@@ -638,7 +634,7 @@ void hgetCommand(client *c) {
if
((
o
=
lookupKeyReadOrReply
(
c
,
c
->
argv
[
1
],
shared
.
nullbulk
))
==
NULL
||
if
((
o
=
lookupKeyReadOrReply
(
c
,
c
->
argv
[
1
],
shared
.
nullbulk
))
==
NULL
||
checkType
(
c
,
o
,
OBJ_HASH
))
return
;
checkType
(
c
,
o
,
OBJ_HASH
))
return
;
addHashFieldToReply
(
c
,
o
,
c
->
argv
[
2
]);
addHashFieldToReply
(
c
,
o
,
c
->
argv
[
2
]
->
ptr
);
}
}
void
hmgetCommand
(
client
*
c
)
{
void
hmgetCommand
(
client
*
c
)
{
...
@@ -655,7 +651,7 @@ void hmgetCommand(client *c) {
...
@@ -655,7 +651,7 @@ void hmgetCommand(client *c) {
addReplyMultiBulkLen
(
c
,
c
->
argc
-
2
);
addReplyMultiBulkLen
(
c
,
c
->
argc
-
2
);
for
(
i
=
2
;
i
<
c
->
argc
;
i
++
)
{
for
(
i
=
2
;
i
<
c
->
argc
;
i
++
)
{
addHashFieldToReply
(
c
,
o
,
c
->
argv
[
i
]);
addHashFieldToReply
(
c
,
o
,
c
->
argv
[
i
]
->
ptr
);
}
}
}
}
...
@@ -667,7 +663,7 @@ void hdelCommand(client *c) {
...
@@ -667,7 +663,7 @@ void hdelCommand(client *c) {
checkType
(
c
,
o
,
OBJ_HASH
))
return
;
checkType
(
c
,
o
,
OBJ_HASH
))
return
;
for
(
j
=
2
;
j
<
c
->
argc
;
j
++
)
{
for
(
j
=
2
;
j
<
c
->
argc
;
j
++
)
{
if
(
hashTypeDelete
(
o
,
c
->
argv
[
j
]))
{
if
(
hashTypeDelete
(
o
,
c
->
argv
[
j
]
->
ptr
))
{
deleted
++
;
deleted
++
;
if
(
hashTypeLength
(
o
)
==
0
)
{
if
(
hashTypeLength
(
o
)
==
0
)
{
dbDelete
(
c
->
db
,
c
->
argv
[
1
]);
dbDelete
(
c
->
db
,
c
->
argv
[
1
]);
...
@@ -701,7 +697,7 @@ void hstrlenCommand(client *c) {
...
@@ -701,7 +697,7 @@ void hstrlenCommand(client *c) {
if
((
o
=
lookupKeyReadOrReply
(
c
,
c
->
argv
[
1
],
shared
.
czero
))
==
NULL
||
if
((
o
=
lookupKeyReadOrReply
(
c
,
c
->
argv
[
1
],
shared
.
czero
))
==
NULL
||
checkType
(
c
,
o
,
OBJ_HASH
))
return
;
checkType
(
c
,
o
,
OBJ_HASH
))
return
;
addReplyLongLong
(
c
,
hashTypeGetValueLength
(
o
,
c
->
argv
[
2
]));
addReplyLongLong
(
c
,
hashTypeGetValueLength
(
o
,
c
->
argv
[
2
]
->
ptr
));
}
}
static
void
addHashIteratorCursorToReply
(
client
*
c
,
hashTypeIterator
*
hi
,
int
what
)
{
static
void
addHashIteratorCursorToReply
(
client
*
c
,
hashTypeIterator
*
hi
,
int
what
)
{
...
@@ -711,18 +707,13 @@ static void addHashIteratorCursorToReply(client *c, hashTypeIterator *hi, int wh
...
@@ -711,18 +707,13 @@ static void addHashIteratorCursorToReply(client *c, hashTypeIterator *hi, int wh
long
long
vll
=
LLONG_MAX
;
long
long
vll
=
LLONG_MAX
;
hashTypeCurrentFromZiplist
(
hi
,
what
,
&
vstr
,
&
vlen
,
&
vll
);
hashTypeCurrentFromZiplist
(
hi
,
what
,
&
vstr
,
&
vlen
,
&
vll
);
if
(
vstr
)
{
if
(
vstr
)
addReplyBulkCBuffer
(
c
,
vstr
,
vlen
);
addReplyBulkCBuffer
(
c
,
vstr
,
vlen
);
}
else
{
else
addReplyBulkLongLong
(
c
,
vll
);
addReplyBulkLongLong
(
c
,
vll
);
}
}
else
if
(
hi
->
encoding
==
OBJ_ENCODING_HT
)
{
}
else
if
(
hi
->
encoding
==
OBJ_ENCODING_HT
)
{
robj
*
value
;
sds
value
=
hashTypeCurrentFromHashTable
(
hi
,
what
);
addReplyBulkCBuffer
(
c
,
value
,
sdslen
(
value
));
hashTypeCurrentFromHashTable
(
hi
,
what
,
&
value
);
addReplyBulk
(
c
,
value
);
}
else
{
}
else
{
serverPanic
(
"Unknown hash encoding"
);
serverPanic
(
"Unknown hash encoding"
);
}
}
...
@@ -776,7 +767,7 @@ void hexistsCommand(client *c) {
...
@@ -776,7 +767,7 @@ void hexistsCommand(client *c) {
if
((
o
=
lookupKeyReadOrReply
(
c
,
c
->
argv
[
1
],
shared
.
czero
))
==
NULL
||
if
((
o
=
lookupKeyReadOrReply
(
c
,
c
->
argv
[
1
],
shared
.
czero
))
==
NULL
||
checkType
(
c
,
o
,
OBJ_HASH
))
return
;
checkType
(
c
,
o
,
OBJ_HASH
))
return
;
addReply
(
c
,
hashTypeExists
(
o
,
c
->
argv
[
2
])
?
shared
.
cone
:
shared
.
czero
);
addReply
(
c
,
hashTypeExists
(
o
,
c
->
argv
[
2
]
->
ptr
)
?
shared
.
cone
:
shared
.
czero
);
}
}
void
hscanCommand
(
client
*
c
)
{
void
hscanCommand
(
client
*
c
)
{
...
...
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