33 #include <drizzled/item/func.h>
34 #include <drizzled/function/str/strfunc.h>
36 #include "memcached_functions.h"
37 #include "memc_behavior_set.h"
39 #include <libmemcached/memcached.h>
45 using namespace drizzled;
47 void MemcachedBehaviorSet::setFailureString(
const char *error)
49 size_t size= strlen(error);
50 failure_buff.realloc(size);
51 failure_buff.length(size);
52 memcpy(failure_buff.ptr(), error, size);
58 memcached_behavior mbehavior;
60 map<const string, memcached_behavior>::iterator it_behav;
61 map<const string, uint64_t>::iterator it_hash;
62 map<const string, uint64_t>::iterator it_dist;
67 ! (tmp_behavior= args[0]->val_str(str)) ||
68 ! (tmp_setting= args[1]->val_str(str)) ||
71 setFailureString(
"USAGE: memc_behavior_set('<behavior type>','<value>')");
75 string behavior(tmp_behavior->c_ptr());
76 string setting(tmp_setting->c_ptr());
82 boost::to_upper(behavior);
83 boost::to_upper(setting);
85 it_behav= behavior_map.find(behavior);
86 if (it_behav == behavior_map.end())
88 setFailureString(
"UNKNOWN BEHAVIOR TYPE!");
91 mbehavior= behavior_map[behavior];
95 case MEMCACHED_BEHAVIOR_SUPPORT_CAS:
96 case MEMCACHED_BEHAVIOR_NO_BLOCK:
97 case MEMCACHED_BEHAVIOR_BUFFER_REQUESTS:
98 case MEMCACHED_BEHAVIOR_USER_DATA:
99 case MEMCACHED_BEHAVIOR_SORT_HOSTS:
100 case MEMCACHED_BEHAVIOR_VERIFY_KEY:
101 case MEMCACHED_BEHAVIOR_TCP_NODELAY:
102 case MEMCACHED_BEHAVIOR_KETAMA:
103 case MEMCACHED_BEHAVIOR_CACHE_LOOKUPS:
104 if (setting.compare(
"1") == 0)
108 else if (setting.compare(
"0") == 0)
114 setFailureString(
"INVALID VALUE FOR BEHAVIOR - MUST be 1 OR 0!");
115 return &failure_buff;
118 case MEMCACHED_BEHAVIOR_DISTRIBUTION:
119 it_dist= dist_settings_map.find(setting);
120 if (it_dist == dist_settings_map.end())
122 setFailureString(
"INVALID VALUE FOR DISTRIBUTION!");
123 return &failure_buff;
125 isetting= dist_settings_map[setting];
127 case MEMCACHED_BEHAVIOR_HASH:
128 it_hash= hash_settings_map.find(setting);
129 if (it_hash == hash_settings_map.end())
131 setFailureString(
"INVALID VALUE FOR MEMCACHED HASH ALGORITHM!");
132 return &failure_buff;
134 isetting= hash_settings_map[setting];
136 case MEMCACHED_BEHAVIOR_KETAMA_HASH:
137 isetting= ketama_hash_settings_map[setting];
140 setFailureString(
"INVALID VALUE FOR KETAMA HASH ALGORITHM!");
141 return &failure_buff;
144 case MEMCACHED_BEHAVIOR_SOCKET_SEND_SIZE:
145 case MEMCACHED_BEHAVIOR_SOCKET_RECV_SIZE:
146 case MEMCACHED_BEHAVIOR_POLL_TIMEOUT:
147 case MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT:
148 case MEMCACHED_BEHAVIOR_RETRY_TIMEOUT:
149 case MEMCACHED_BEHAVIOR_IO_MSG_WATERMARK:
150 case MEMCACHED_BEHAVIOR_IO_BYTES_WATERMARK:
160 rc= memcached_behavior_set(memc, mbehavior, isetting);
162 if (rc != MEMCACHED_SUCCESS)
164 return &failure_buff;
167 return &success_buff;