X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=libmemcached%2Fauto.cc;h=df4ceb2fd2f1025f5415e05e3a05675a821570ee;hb=d4758957f0b472a5f247004862fef55f58edcc8f;hp=964e8971b5df3356455e732d2024eb44107aa3cb;hpb=0ec6fc3c490da878f1ad597c9501f5db686192a3;p=m6w6%2Flibmemcached diff --git a/libmemcached/auto.cc b/libmemcached/auto.cc index 964e8971..df4ceb2f 100644 --- a/libmemcached/auto.cc +++ b/libmemcached/auto.cc @@ -139,75 +139,79 @@ static memcached_return_t binary_incr_decr(memcached_server_write_instance_st in return memcached_vdo(instance, vector, 4, true); } -memcached_return_t memcached_increment(memcached_st *ptr, +memcached_return_t memcached_increment(memcached_st *memc, const char *key, size_t key_length, uint32_t offset, uint64_t *value) { - return memcached_increment_by_key(ptr, key, key_length, key, key_length, offset, value); + return memcached_increment_by_key(memc, key, key_length, key, key_length, offset, value); } -memcached_return_t memcached_decrement(memcached_st *ptr, - const char *key, size_t key_length, - uint32_t offset, - uint64_t *value) -{ - return memcached_decrement_by_key(ptr, key, key_length, key, key_length, offset, value); -} - -memcached_return_t memcached_increment_by_key(memcached_st *ptr, - const char *group_key, size_t group_key_length, - const char *key, size_t key_length, - uint64_t offset, - uint64_t *value) +static memcached_return_t increment_decrement_by_key(const protocol_binary_command command, + memcached_st *memc, + const char *group_key, size_t group_key_length, + const char *key, size_t key_length, + uint64_t offset, + uint64_t *value) { - memcached_return_t rc; uint64_t local_value; if (value == NULL) { value= &local_value; } - if (memcached_failed(rc= initialize_query(ptr, true))) + memcached_return_t rc; + if (memcached_failed(rc= initialize_query(memc, true))) { return rc; } - if (memcached_failed(rc= memcached_key_test(*ptr, (const char **)&key, &key_length, 1))) + if (memcached_is_encrypted(memc)) { - return rc; + return memcached_set_error(*memc, MEMCACHED_NOT_SUPPORTED, MEMCACHED_AT, + memcached_literal_param("Operation not allowed while encyrption is enabled")); + } + + if (memcached_failed(rc= memcached_key_test(*memc, (const char **)&key, &key_length, 1))) + { + return memcached_last_error(memc); } - uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length); - memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, server_key); + uint32_t server_key= memcached_generate_hash_with_redistribution(memc, group_key, group_key_length); + memcached_server_write_instance_st instance= memcached_server_instance_fetch(memc, server_key); bool reply= memcached_is_replying(instance->root); - LIBMEMCACHED_MEMCACHED_INCREMENT_START(); - if (memcached_is_binary(ptr)) + if (memcached_is_binary(memc)) { - rc= binary_incr_decr(instance, PROTOCOL_BINARY_CMD_INCREMENT, + rc= binary_incr_decr(instance, command, key, key_length, uint64_t(offset), 0, MEMCACHED_EXPIRATION_NOT_ADD, reply); } else { - rc= text_incr_decr(instance, true, key, key_length, offset, reply); + rc= text_incr_decr(instance, + command == PROTOCOL_BINARY_CMD_INCREMENT ? true : false, + key, key_length, + offset, reply); } auto_response(instance, reply, rc, value); - LIBMEMCACHED_MEMCACHED_INCREMENT_END(); - return rc; } -memcached_return_t memcached_decrement_by_key(memcached_st *ptr, - const char *group_key, size_t group_key_length, - const char *key, size_t key_length, - uint64_t offset, - uint64_t *value) +static memcached_return_t increment_decrement_with_initial_by_key(const protocol_binary_command command, + memcached_st *memc, + const char *group_key, + size_t group_key_length, + const char *key, + size_t key_length, + uint64_t offset, + uint64_t initial, + time_t expiration, + uint64_t *value) { uint64_t local_value; if (value == NULL) @@ -216,43 +220,91 @@ memcached_return_t memcached_decrement_by_key(memcached_st *ptr, } memcached_return_t rc; - if (memcached_failed(rc= initialize_query(ptr, true))) + if (memcached_failed(rc= initialize_query(memc, true))) { return rc; } - if (memcached_failed(rc= memcached_key_test(*ptr, (const char **)&key, &key_length, 1))) + if (memcached_is_encrypted(memc)) { - return rc; + return memcached_set_error(*memc, MEMCACHED_NOT_SUPPORTED, MEMCACHED_AT, + memcached_literal_param("Operation not allowed while encyrption is enabled")); } + if (memcached_failed(rc= memcached_key_test(*memc, (const char **)&key, &key_length, 1))) + { + return memcached_last_error(memc); + } - uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length); - memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, server_key); + uint32_t server_key= memcached_generate_hash_with_redistribution(memc, group_key, group_key_length); + memcached_server_write_instance_st instance= memcached_server_instance_fetch(memc, server_key); bool reply= memcached_is_replying(instance->root); - LIBMEMCACHED_MEMCACHED_DECREMENT_START(); - if (memcached_is_binary(ptr)) + if (memcached_is_binary(memc)) { - rc= binary_incr_decr(instance, PROTOCOL_BINARY_CMD_DECREMENT, + rc= binary_incr_decr(instance, command, key, key_length, - offset, 0, MEMCACHED_EXPIRATION_NOT_ADD, + offset, initial, uint32_t(expiration), reply); + } else { - rc= text_incr_decr(instance, false, key, key_length, offset, reply); + rc= memcached_set_error(*memc, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, + memcached_literal_param("memcached_increment_with_initial_by_key() is not supported via the ASCII protocol")); } auto_response(instance, reply, rc, value); + return rc; +} + +memcached_return_t memcached_decrement(memcached_st *memc, + const char *key, size_t key_length, + uint32_t offset, + uint64_t *value) +{ + return memcached_decrement_by_key(memc, key, key_length, key, key_length, offset, value); +} + + +memcached_return_t memcached_increment_by_key(memcached_st *memc, + const char *group_key, size_t group_key_length, + const char *key, size_t key_length, + uint64_t offset, + uint64_t *value) +{ + LIBMEMCACHED_MEMCACHED_INCREMENT_START(); + memcached_return_t rc= increment_decrement_by_key(PROTOCOL_BINARY_CMD_INCREMENT, + memc, + group_key, group_key_length, + key, key_length, + offset, value); + + LIBMEMCACHED_MEMCACHED_INCREMENT_END(); + + return rc; +} + +memcached_return_t memcached_decrement_by_key(memcached_st *memc, + const char *group_key, size_t group_key_length, + const char *key, size_t key_length, + uint64_t offset, + uint64_t *value) +{ + LIBMEMCACHED_MEMCACHED_DECREMENT_START(); + memcached_return_t rc= increment_decrement_by_key(PROTOCOL_BINARY_CMD_DECREMENT, + memc, + group_key, group_key_length, + key, key_length, + offset, value); LIBMEMCACHED_MEMCACHED_DECREMENT_END(); return rc; } -memcached_return_t memcached_increment_with_initial(memcached_st *ptr, +memcached_return_t memcached_increment_with_initial(memcached_st *memc, const char *key, size_t key_length, uint64_t offset, @@ -260,66 +312,33 @@ memcached_return_t memcached_increment_with_initial(memcached_st *ptr, time_t expiration, uint64_t *value) { - return memcached_increment_with_initial_by_key(ptr, key, key_length, + return memcached_increment_with_initial_by_key(memc, key, key_length, key, key_length, offset, initial, expiration, value); } -memcached_return_t memcached_increment_with_initial_by_key(memcached_st *ptr, - const char *group_key, - size_t group_key_length, - const char *key, - size_t key_length, - uint64_t offset, - uint64_t initial, - time_t expiration, - uint64_t *value) +memcached_return_t memcached_increment_with_initial_by_key(memcached_st *memc, + const char *group_key, + size_t group_key_length, + const char *key, + size_t key_length, + uint64_t offset, + uint64_t initial, + time_t expiration, + uint64_t *value) { - uint64_t local_value; - if (value == NULL) - { - value= &local_value; - } - - memcached_return_t rc; - if (memcached_failed(rc= initialize_query(ptr, true))) - { - return rc; - } - - if (memcached_failed(rc= memcached_key_test(*ptr, (const char **)&key, &key_length, 1))) - { - return rc; - } - - uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length); - memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, server_key); - - bool reply= memcached_is_replying(instance->root); - LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_START(); - if (memcached_is_binary(ptr)) - { - rc= binary_incr_decr(instance, PROTOCOL_BINARY_CMD_INCREMENT, - key, key_length, - offset, initial, uint32_t(expiration), - reply); - - } - else - { - rc= memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, - memcached_literal_param("memcached_increment_with_initial_by_key() is not supported via the ASCII protocol")); - } - - auto_response(instance, reply, rc, value); - + memcached_return_t rc= increment_decrement_with_initial_by_key(PROTOCOL_BINARY_CMD_INCREMENT, + memc, + group_key, group_key_length, + key, key_length, + offset, initial, expiration, value); LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_END(); return rc; } -memcached_return_t memcached_decrement_with_initial(memcached_st *ptr, +memcached_return_t memcached_decrement_with_initial(memcached_st *memc, const char *key, size_t key_length, uint64_t offset, @@ -327,12 +346,12 @@ memcached_return_t memcached_decrement_with_initial(memcached_st *ptr, time_t expiration, uint64_t *value) { - return memcached_decrement_with_initial_by_key(ptr, key, key_length, + return memcached_decrement_with_initial_by_key(memc, key, key_length, key, key_length, offset, initial, expiration, value); } -memcached_return_t memcached_decrement_with_initial_by_key(memcached_st *ptr, +memcached_return_t memcached_decrement_with_initial_by_key(memcached_st *memc, const char *group_key, size_t group_key_length, const char *key, @@ -342,45 +361,12 @@ memcached_return_t memcached_decrement_with_initial_by_key(memcached_st *ptr, time_t expiration, uint64_t *value) { - uint64_t local_value; - if (value == NULL) - { - value= &local_value; - } - - memcached_return_t rc; - if (memcached_failed(rc= initialize_query(ptr, true))) - { - return rc; - } - - if (memcached_failed(rc= memcached_key_test(*ptr, (const char **)&key, &key_length, 1))) - { - return rc; - } - - uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length); - memcached_server_write_instance_st instance= memcached_server_instance_fetch(ptr, server_key); - - bool reply= memcached_is_replying(instance->root); - - LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_START(); - if (memcached_is_binary(ptr)) - { - rc= binary_incr_decr(instance, PROTOCOL_BINARY_CMD_DECREMENT, - key, key_length, - offset, initial, uint32_t(expiration), - reply); - - } - else - { - rc= memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT, - memcached_literal_param("memcached_decrement_with_initial_by_key() is not supported via the ASCII protocol")); - } - - auto_response(instance, reply, rc, value); + memcached_return_t rc= increment_decrement_with_initial_by_key(PROTOCOL_BINARY_CMD_DECREMENT, + memc, + group_key, group_key_length, + key, key_length, + offset, initial, expiration, value); LIBMEMCACHED_MEMCACHED_INCREMENT_WITH_INITIAL_END();