Skip to content

Commit

Permalink
INTERNAL: Add a function to initialize a smget_result struct
Browse files Browse the repository at this point in the history
  • Loading branch information
ing-eoking authored and jhpark816 committed Dec 26, 2024
1 parent f1b0e1c commit 6ad533c
Showing 1 changed file with 26 additions and 17 deletions.
43 changes: 26 additions & 17 deletions libmemcached/collection.cc
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,30 @@ static inline int memcached_coll_eflag_update_to_str(memcached_coll_eflag_update
return write_length;
}

static void initialize_smget_result_from_query(memcached_coll_smget_result_st *result,
memcached_bop_query_st *query)
{
assert(result and query);
result->sub_key_type= query->type;
result->offset= query->offset;
result->count= query->count;
result->smgmode= query->smgmode;

if (query->type == MEMCACHED_COLL_QUERY_BOP_RANGE)
{
if (query->sub_key.bkey_range[0] > query->sub_key.bkey_range[1]) {
result->options.is_descending= true;
}
}
else if (query->type == MEMCACHED_COLL_QUERY_BOP_EXT_RANGE)
{
if (memcached_compare_two_hexadecimal(&query->sub_key.bkey_ext_range[0],
&query->sub_key.bkey_ext_range[1]) == 1) {
result->options.is_descending= true;
}
}
}

static memcached_return_t do_aggregate_pipe_responses(memcached_st *ptr, memcached_return_t rc)
{
memcached_return_t res= (rc != MEMCACHED_SUCCESS ? MEMCACHED_ALL_FAILURE : MEMCACHED_MAXIMUM_RETURN);
Expand Down Expand Up @@ -2584,8 +2608,6 @@ static memcached_return_t do_bop_smget(memcached_st *ptr,
char buffer[buffer_length];
int write_length= 0;

result->sub_key_type= query->type;

if (MEMCACHED_COLL_QUERY_BOP == query->type)
{
write_length= snprintf(buffer, buffer_length,
Expand All @@ -2598,10 +2620,6 @@ static memcached_return_t do_bop_smget(memcached_st *ptr,
" %llu..%llu",
(unsigned long long)query->sub_key.bkey_range[0],
(unsigned long long)query->sub_key.bkey_range[1]);
if (query->sub_key.bkey_range[0] > query->sub_key.bkey_range[1])
{
result->options.is_descending= true;
}
}
else if (MEMCACHED_COLL_QUERY_BOP_EXT == query->type)
{
Expand All @@ -2622,11 +2640,6 @@ static memcached_return_t do_bop_smget(memcached_st *ptr,

write_length= snprintf(buffer, buffer_length,
" 0x%s..0x%s", bkey_str_from, bkey_str_to);

if (memcached_compare_two_hexadecimal(&query->sub_key.bkey_ext_range[0], &query->sub_key.bkey_ext_range[1]) == 1)
{
result->options.is_descending= true;
}
}
else
{
Expand All @@ -2650,18 +2663,12 @@ static memcached_return_t do_bop_smget(memcached_st *ptr,
/* Options */
write_length+= snprintf(buffer+write_length, buffer_length-write_length,
" %u %u", (int)0, (int)(query->offset + query->count));
if (result != NULL)
{
result->offset= query->offset;
result->count= query->count;
}

/* smget mode */
if (query->smgmode != MEMCACHED_COLL_SMGET_NONE)
{
write_length+= snprintf(buffer+write_length, buffer_length-write_length, " %s",
(query->smgmode == MEMCACHED_COLL_SMGET_DUPLICATE ? "duplicate" : "unique"));
result->smgmode= query->smgmode;
}

if ((size_t)write_length >= buffer_length || write_length < 0)
Expand All @@ -2670,6 +2677,8 @@ static memcached_return_t do_bop_smget(memcached_st *ptr,
memcached_literal_param("snprintf(MEMCACHED_MAXIMUM_COMMAND_SIZE)"));
}

initialize_smget_result_from_query(result, query);

/* Command */
const char *command= coll_op_string(BOP_SMGET_OP);
uint8_t command_length= coll_op_length(BOP_SMGET_OP);
Expand Down

0 comments on commit 6ad533c

Please sign in to comment.