00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <config.h>
00033 #include <drizzled/function/str/strfunc.h>
00034 #include <drizzled/plugin/function.h>
00035
00036 #include "memcached_functions.h"
00037 #include "memc_servers_set.h"
00038 #include "memc_behavior_set.h"
00039 #include "memc_behavior_get.h"
00040 #include "memc_stats.h"
00041 #include "memc_get.h"
00042 #include "memc_get_by_key.h"
00043 #include "memc_set.h"
00044 #include "memc_set_by_key.h"
00045 #include "memc_add.h"
00046 #include "memc_add_by_key.h"
00047 #include "memc_replace.h"
00048 #include "memc_replace_by_key.h"
00049 #include "memc_delete.h"
00050 #include "memc_delete_by_key.h"
00051 #include "memc_append.h"
00052 #include "memc_append_by_key.h"
00053 #include "memc_prepend.h"
00054 #include "memc_prepend_by_key.h"
00055 #include "memc_cas.h"
00056 #include "memc_cas_by_key.h"
00057 #include "memc_increment.h"
00058 #include "memc_decrement.h"
00059 #include "memc_misc.h"
00060
00061 #include <libmemcached/memcached.h>
00062
00063 #include <string>
00064
00065 using namespace std;
00066 using namespace drizzled;
00067
00068
00069
00070
00071
00072 memcached_st *memc= NULL;
00073
00074
00075
00076
00077 plugin::Create_function<MemcachedServersSet> *memc_servers_set= NULL;
00078 plugin::Create_function<MemcachedBehaviorSet> *memc_behavior_set= NULL;
00079 plugin::Create_function<MemcachedBehaviorGet> *memc_behavior_get= NULL;
00080 plugin::Create_function<MemcachedStats> *memc_stats= NULL;
00081 plugin::Create_function<MemcachedGet> *memc_get= NULL;
00082 plugin::Create_function<MemcachedGetByKey> *memc_get_by_key= NULL;
00083 plugin::Create_function<MemcachedSet> *memc_set= NULL;
00084 plugin::Create_function<MemcachedSetByKey> *memc_set_by_key= NULL;
00085 plugin::Create_function<MemcachedAdd> *memc_add= NULL;
00086 plugin::Create_function<MemcachedAddByKey> *memc_add_by_key= NULL;
00087 plugin::Create_function<MemcachedReplace> *memc_replace= NULL;
00088 plugin::Create_function<MemcachedReplaceByKey> *memc_replace_by_key= NULL;
00089 plugin::Create_function<MemcachedIncrement> *memc_increment= NULL;
00090 plugin::Create_function<MemcachedDecrement> *memc_decrement= NULL;
00091 plugin::Create_function<MemcachedDelete> *memc_delete= NULL;
00092 plugin::Create_function<MemcachedDeleteByKey> *memc_delete_by_key= NULL;
00093 plugin::Create_function<MemcachedAppend> *memc_append= NULL;
00094 plugin::Create_function<MemcachedAppendByKey> *memc_append_by_key= NULL;
00095 plugin::Create_function<MemcachedPrepend> *memc_prepend= NULL;
00096 plugin::Create_function<MemcachedPrependByKey> *memc_prepend_by_key= NULL;
00097 plugin::Create_function<MemcachedCas> *memc_cas= NULL;
00098 plugin::Create_function<MemcachedCasByKey> *memc_cas_by_key= NULL;
00099 plugin::Create_function<MemcachedServerCount> *memc_serv_count= NULL;
00100 plugin::Create_function<MemcachedVersion> *memc_version= NULL;
00101
00102 bool initMemcUDF()
00103 {
00104 memc_servers_set= new plugin::Create_function<MemcachedServersSet>("memc_servers_set");
00105 if (memc_servers_set == NULL)
00106 {
00107 return true;
00108 }
00109
00110 memc_behavior_set= new plugin::Create_function<MemcachedBehaviorSet>("memc_behavior_set");
00111 if (memc_behavior_set == NULL)
00112 {
00113 return true;
00114 }
00115
00116 memc_behavior_get= new plugin::Create_function<MemcachedBehaviorGet>("memc_behavior_get");
00117 if (memc_behavior_get == NULL)
00118 {
00119 return true;
00120 }
00121
00122 memc_stats= new plugin::Create_function<MemcachedStats>("memc_stats");
00123 if (memc_stats == NULL)
00124 {
00125 return true;
00126 }
00127
00128 memc_get= new plugin::Create_function<MemcachedGet>("memc_get");
00129 if (memc_get == NULL)
00130 {
00131 return true;
00132 }
00133
00134 memc_get_by_key= new plugin::Create_function<MemcachedGetByKey>("memc_get_by_key");
00135 if (memc_get_by_key == NULL)
00136 {
00137 return true;
00138 }
00139
00140 memc_set= new plugin::Create_function<MemcachedSet>("memc_set");
00141 if (memc_set == NULL)
00142 {
00143 return true;
00144 }
00145 memc_set_by_key= new plugin::Create_function<MemcachedSetByKey>("memc_set_by_key");
00146 if (memc_set_by_key == NULL)
00147 {
00148 return true;
00149 }
00150
00151 memc_add= new plugin::Create_function<MemcachedAdd>("memc_add");
00152 if (memc_add== NULL)
00153 {
00154 return true;
00155 }
00156
00157 memc_add_by_key= new plugin::Create_function<MemcachedAddByKey>("memc_add_by_key");
00158 if (memc_add_by_key == NULL)
00159 {
00160 return true;
00161 }
00162
00163 memc_replace= new plugin::Create_function<MemcachedReplace>("memc_replace");
00164 if (memc_replace== NULL)
00165 {
00166 return true;
00167 }
00168
00169 memc_replace_by_key= new plugin::Create_function<MemcachedReplaceByKey>("memc_replace_by_key");
00170 if (memc_replace_by_key == NULL)
00171 {
00172 return true;
00173 }
00174
00175 memc_delete= new plugin::Create_function<MemcachedDelete>("memc_delete");
00176 if (memc_delete == NULL)
00177 {
00178 return true;
00179 }
00180
00181 memc_delete_by_key= new plugin::Create_function<MemcachedDeleteByKey>("memc_delete_by_key");
00182 if (memc_delete_by_key == NULL)
00183 {
00184 return true;
00185 }
00186
00187 memc_append= new plugin::Create_function<MemcachedAppend>("memc_append");
00188 if (memc_append == NULL)
00189 {
00190 return true;
00191 }
00192
00193 memc_append_by_key= new plugin::Create_function<MemcachedAppendByKey>("memc_append_by_key");
00194 if (memc_append_by_key == NULL)
00195 {
00196 return true;
00197 }
00198
00199 memc_prepend= new plugin::Create_function<MemcachedPrepend>("memc_prepend");
00200 if (memc_prepend == NULL)
00201 {
00202 return true;
00203 }
00204
00205 memc_prepend_by_key= new plugin::Create_function<MemcachedPrependByKey>("memc_prepend_by_key");
00206 if (memc_prepend_by_key == NULL)
00207 {
00208 return true;
00209 }
00210
00211 memc_cas= new plugin::Create_function<MemcachedCas>("memc_cas");
00212 if (memc_cas == NULL)
00213 {
00214 return true;
00215 }
00216
00217 memc_cas_by_key= new plugin::Create_function<MemcachedCasByKey>("memc_cas_by_key");
00218 if (memc_cas_by_key == NULL)
00219 {
00220 return true;
00221 }
00222
00223 memc_serv_count= new plugin::Create_function<MemcachedServerCount>("memc_server_count");
00224 if (memc_serv_count == NULL)
00225 {
00226 return true;
00227 }
00228
00229 memc_version= new plugin::Create_function<MemcachedVersion>("memc_libmemcached_version");
00230 if (memc_version == NULL)
00231 {
00232 return true;
00233 }
00234
00235 memc_increment= new plugin::Create_function<MemcachedIncrement>("memc_increment");
00236 if (memc_increment == NULL)
00237 {
00238 return true;
00239 }
00240
00241 memc_decrement= new plugin::Create_function<MemcachedDecrement>("memc_decrement");
00242 if (memc_decrement == NULL)
00243 {
00244 return true;
00245 }
00246
00247 return false;
00248 }
00249
00250 void cleanupMemcUDF()
00251 {
00252 delete memc_servers_set;
00253 delete memc_behavior_set;
00254 delete memc_behavior_get;
00255 delete memc_stats;
00256 delete memc_get;
00257 delete memc_get_by_key;
00258 delete memc_set;
00259 delete memc_set_by_key;
00260 delete memc_add;
00261 delete memc_add_by_key;
00262 delete memc_replace;
00263 delete memc_replace_by_key;
00264 delete memc_delete;
00265 delete memc_delete_by_key;
00266 delete memc_append;
00267 delete memc_append_by_key;
00268 delete memc_prepend;
00269 delete memc_prepend_by_key;
00270 delete memc_cas;
00271 delete memc_cas_by_key;
00272 delete memc_serv_count;
00273 delete memc_version;
00274 delete memc_increment;
00275 delete memc_decrement;
00276 }
00277
00278 static int memcachedInit(drizzled::module::Context &context)
00279 {
00280 if (initMemcUDF())
00281 {
00282 return 1;
00283 }
00284
00285 memc= memcached_create(NULL);
00286
00287 context.add(memc_servers_set);
00288 context.add(memc_behavior_set);
00289 context.add(memc_behavior_get);
00290 context.add(memc_stats);
00291 context.add(memc_get);
00292 context.add(memc_get_by_key);
00293 context.add(memc_set);
00294 context.add(memc_set_by_key);
00295 context.add(memc_add);
00296 context.add(memc_add_by_key);
00297 context.add(memc_replace);
00298 context.add(memc_replace_by_key);
00299 context.add(memc_delete);
00300 context.add(memc_delete_by_key);
00301 context.add(memc_append);
00302 context.add(memc_append_by_key);
00303 context.add(memc_prepend);
00304 context.add(memc_prepend_by_key);
00305 context.add(memc_cas);
00306 context.add(memc_cas_by_key);
00307 context.add(memc_serv_count);
00308 context.add(memc_version);
00309 context.add(memc_increment);
00310 context.add(memc_decrement);
00311
00312 return 0;
00313 }
00314
00315 static int memcachedDone(drizzled::module::Context &context)
00316 {
00317
00318 memcached_free(memc);
00319
00320 context.remove(memc_servers_set);
00321 context.remove(memc_behavior_set);
00322 context.remove(memc_behavior_get);
00323 context.remove(memc_stats);
00324 context.remove(memc_get);
00325 context.remove(memc_get_by_key);
00326 context.remove(memc_set);
00327 context.remove(memc_set_by_key);
00328 context.remove(memc_add);
00329 context.remove(memc_add_by_key);
00330 context.remove(memc_replace);
00331 context.remove(memc_replace_by_key);
00332 context.remove(memc_delete);
00333 context.remove(memc_delete_by_key);
00334 context.remove(memc_append);
00335 context.remove(memc_append_by_key);
00336 context.remove(memc_prepend);
00337 context.remove(memc_prepend_by_key);
00338 context.remove(memc_cas);
00339 context.remove(memc_cas_by_key);
00340 context.remove(memc_serv_count);
00341 context.remove(memc_version);
00342 context.remove(memc_increment);
00343 context.remove(memc_decrement);
00344
00345 cleanupMemcUDF();
00346
00347 return 0;
00348 }
00349
00350 DRIZZLE_DECLARE_PLUGIN
00351 {
00352 DRIZZLE_VERSION_ID,
00353 "memcached_functions",
00354 "0.1",
00355 "Patrick Galbraith, Ronald Bradford, Padraig O'Sullivan",
00356 "Memcached UDF Plugin",
00357 PLUGIN_LICENSE_GPL,
00358 memcachedInit,
00359 memcachedDone,
00360 NULL,
00361 NULL
00362 }
00363 DRIZZLE_DECLARE_PLUGIN_END;