From c3286ff5b25730a9bd3d3e480761b357c89cc491 Mon Sep 17 00:00:00 2001 From: "lizhaolong.lzl" Date: Mon, 21 Jun 2021 20:42:53 +0800 Subject: [PATCH] Modify the execution logic in raxSeek to make it more efficient --- src/rax.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/rax.c b/src/rax.c index 0826b974a..a096ef526 100644 --- a/src/rax.c +++ b/src/rax.c @@ -1633,8 +1633,11 @@ int raxSeek(raxIterator *it, const char *op, unsigned char *ele, size_t len) { if (nodechar > keychar) { if (!raxIteratorNextStep(it,0)) return 0; } else { - if (!raxIteratorAddChars(it,it->node->data,it->node->size)) - return 0; + it->node = raxStackPop(&it->stack); + if (it->key_len == 0) { + it->flags |= RAX_ITER_EOF; + return 1; + } if (!raxIteratorNextStep(it,1)) return 0; } } @@ -1647,8 +1650,11 @@ int raxSeek(raxIterator *it, const char *op, unsigned char *ele, size_t len) { if (!raxSeekGreatest(it)) return 0; it->data = raxGetData(it->node); } else { - if (!raxIteratorAddChars(it,it->node->data,it->node->size)) - return 0; + it->node = raxStackPop(&it->stack); + if (it->key_len == 0) { + it->flags |= RAX_ITER_EOF; + return 1; + } if (!raxIteratorPrevStep(it,1)) return 0; } }