1
/* Copyright (C) 2006 MySQL AB
3
This program is free software; you can redistribute it and/or modify
4
it under the terms of the GNU General Public License as published by
5
the Free Software Foundation; version 2 of the License.
7
This program is distributed in the hope that it will be useful,
8
but WITHOUT ANY WARRANTY; without even the implied warranty of
9
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10
GNU General Public License for more details.
12
You should have received a copy of the GNU General Public License
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
16
#include <drizzled/common_includes.h>
17
#include <drizzled/item_func.h>
18
#include <drizzled/item_strfunc.h>
20
#include <openssl/md5.h>
22
class Item_func_md5 : public Item_str_func
25
const char *func_name() const { return "md5"; }
26
String *val_str(String*);
27
void fix_length_and_dec() {
29
args[0]->collation.set(
30
get_charset_by_csname(args[0]->collation.collation->csname,
31
MY_CS_BINSORT,MYF(0)), DERIVATION_COERCIBLE);
37
String *Item_func_md5::val_str(String *str)
40
String * sptr= args[0]->val_str(str);
41
str->set_charset(&my_charset_bin);
45
unsigned char digest[16];
49
MD5_Update (&context,(unsigned char *) sptr->ptr(), sptr->length());
50
MD5_Final (digest, &context);
51
if (str->alloc(32)) // Ensure that memory is free
56
snprintf((char *) str->ptr(), 33,
57
"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
58
digest[0], digest[1], digest[2], digest[3],
59
digest[4], digest[5], digest[6], digest[7],
60
digest[8], digest[9], digest[10], digest[11],
61
digest[12], digest[13], digest[14], digest[15]);
62
str->length((uint) 32);
70
Item_func* create_md5udf_item(MEM_ROOT* m)
72
return new (m) Item_func_md5();
75
struct udf_func md5udf = {
76
{ C_STRING_WITH_LEN("md5") },
80
static int md5udf_plugin_init(void *p)
82
udf_func **f = (udf_func**) p;
89
static int md5udf_plugin_deinit(void *p)
91
udf_func *udff = (udf_func *) p;
96
mysql_declare_plugin(md5)
102
"UDF for computing md5sum",
104
md5udf_plugin_init, /* Plugin Init */
105
md5udf_plugin_deinit, /* Plugin Deinit */
106
NULL, /* status variables */
107
NULL, /* system variables */
108
NULL /* config options */
110
mysql_declare_plugin_end;