Remove some of copy/past around incr/decr
authorBrian Aker <brian@tangent.org>
Sat, 28 Jan 2012 23:49:13 +0000 (15:49 -0800)
committerBrian Aker <brian@tangent.org>
Sat, 28 Jan 2012 23:49:13 +0000 (15:49 -0800)
libmemcached/auto.cc
libmemcached/delete.cc
libmemcached/server.cc
libmemcached/storage.cc

index 964e8971b5df3356455e732d2024eb44107aa3cb..9d85ad434858897556244f0447f0564cfddadaf5 100644 (file)
@@ -139,75 +139,73 @@ 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_failed(rc= memcached_key_test(*memc, (const char **)&key, &key_length, 1)))
   {
-    return rc;
+    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 +214,85 @@ 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_failed(rc= memcached_key_test(*memc, (const char **)&key, &key_length, 1)))
   {
-    return rc;
+    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 +300,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 +334,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 +349,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();
 
index 1ffdbfac336dd0b0438a0d47fa3b29fdcaae9a74..ea339169707e9c442948d913e8e7736ff7e8ec46 100644 (file)
@@ -146,7 +146,7 @@ memcached_return_t memcached_delete_by_key(memcached_st *ptr,
 
   if (memcached_failed(rc= memcached_key_test(*ptr, (const char **)&key, &key_length, 1)))
   {
-    return rc;
+    return memcached_last_error(ptr);
   }
 
   if (expiration)
index 2f41584419ad337d35d6c6b3572453b405b5506e..b742f7ef1695cde1da2fe736b7b12e0dc120e609 100644 (file)
@@ -285,9 +285,9 @@ memcached_server_instance_st memcached_server_by_key(memcached_st *ptr,
     return NULL;
   }
 
-  if (memcached_failed(rc= (memcached_key_test(*ptr, (const char **)&key, &key_length, 1))))
+  if (memcached_failed((memcached_key_test(*ptr, (const char **)&key, &key_length, 1))))
   {
-    *error= rc;
+    *error= memcached_last_error(ptr);
     return NULL;
   }
 
index e5f67dbcd2e50b7f07118aaa4db10dad3f877bec..1b3dbcddd7cd15e220db0b11d5884ef54820931a 100644 (file)
@@ -342,9 +342,9 @@ static inline memcached_return_t memcached_send(memcached_st *ptr,
     return rc;
   }
 
-  if (memcached_failed(rc= memcached_key_test(*ptr, (const char **)&key, &key_length, 1)))
+  if (memcached_failed(memcached_key_test(*ptr, (const char **)&key, &key_length, 1)))
   {
-    return rc;
+    return memcached_last_error(ptr);
   }
 
   uint32_t server_key= memcached_generate_hash_with_redistribution(ptr, group_key, group_key_length);