~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/crc32/crc32udf.cc

  • Committer: Stewart Smith
  • Date: 2008-07-13 08:00:16 UTC
  • mto: (210.1.1 drizzle)
  • mto: This revision was merged to the branch mainline in revision 211.
  • Revision ID: stewart@flamingspork.com-20080713080016-8qtjv9ypt42azzr6
CRC32() as UDF

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright (C) 2006 MySQL AB
 
2
 
 
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.
 
6
 
 
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.
 
11
 
 
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 */
 
15
 
 
16
#include <mysql_priv.h>
 
17
#include <stdlib.h>
 
18
#include <ctype.h>
 
19
#include <drizzle_version.h>
 
20
#include <mysql/plugin.h>
 
21
#include <my_global.h>
 
22
#include <my_dir.h>
 
23
#include <zlib.h>
 
24
 
 
25
my_bool udf_init_crc32udf(UDF_INIT *initid, UDF_ARGS *args, char *message)
 
26
{
 
27
  /* initid->ptr keeps state for between udf_init_foo and udf_deinit_foo */
 
28
  initid->ptr= NULL;
 
29
 
 
30
  if (args->arg_count != 1)
 
31
   {
 
32
      strcpy(message,"CRC32() requires one arguments");
 
33
      return 1;
 
34
   }
 
35
 
 
36
   if (args->arg_type[0] != STRING_RESULT)
 
37
   {
 
38
      strcpy(message,"CRC32() requires a string");
 
39
      return 1;
 
40
   }
 
41
 
 
42
  return 0;
 
43
}
 
44
 
 
45
long long udf_doit_crc32(UDF_INIT *initid, UDF_ARGS *args, char *result,
 
46
                         unsigned long *length, char *is_null, char *error)
 
47
{
 
48
  return (longlong) crc32(0L, (uchar*)args->args[0], args->lengths[0]);
 
49
}
 
50
 
 
51
void udf_deinit_crc32udf(UDF_INIT *initid)
 
52
{
 
53
  /* if we allocated initid->ptr, free it here */
 
54
  return;
 
55
}
 
56
 
 
57
 
 
58
static int crc32udf_plugin_init(void *p)
 
59
{
 
60
  udf_func *udff= (udf_func *) p;
 
61
 
 
62
  udff->name.str= "crc32";
 
63
  udff->name.length= strlen("crc32");
 
64
  udff->type= UDFTYPE_FUNCTION;
 
65
  udff->returns= INT_RESULT;
 
66
  udff->func_init= udf_init_crc32udf;
 
67
  udff->func_deinit= udf_deinit_crc32udf;
 
68
  udff->func= (Udf_func_any) udf_doit_crc32;
 
69
 
 
70
  return 0;
 
71
}
 
72
 
 
73
static int crc32udf_plugin_deinit(void *p)
 
74
{
 
75
  udf_func *udff = (udf_func *) p;
 
76
 
 
77
  return 0;
 
78
}
 
79
 
 
80
struct st_mysql_udf crc32udf_plugin=
 
81
{ MYSQL_UDF_INTERFACE_VERSION  };
 
82
 
 
83
mysql_declare_plugin(crc32udf)
 
84
{
 
85
  MYSQL_UDF_PLUGIN,
 
86
  &crc32udf_plugin,
 
87
  "crc32",
 
88
  "Stewart Smith",
 
89
  "UDF for computing CRC32",
 
90
  PLUGIN_LICENSE_GPL,
 
91
  crc32udf_plugin_init, /* Plugin Init */
 
92
  crc32udf_plugin_deinit, /* Plugin Deinit */
 
93
  0x0100,  /* 1.0 */
 
94
  NULL,   /* status variables */
 
95
  NULL,   /* system variables */
 
96
  NULL    /* config options */
 
97
}
 
98
mysql_declare_plugin_end;