~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/hello_world/hello_world.cc

  • Committer: Mark Atwood
  • Date: 2008-07-12 11:37:59 UTC
  • mto: This revision was merged to the branch mainline in revision 139.
  • Revision ID: me@mark.atwood.name-20080712113759-nrjn1bq1e0shuory
Add hello_world() 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
 
 
24
my_bool udf_init_hello_world(UDF_INIT *initid, UDF_ARGS *args, char *message)
 
25
{
 
26
  /* this is how to fail */
 
27
  if (args->arg_count != 0)  {
 
28
    strncpy(message, "Too many arguments", MYSQL_ERRMSG_SIZE);
 
29
    return 1;
 
30
  }
 
31
 
 
32
  /* initid->ptr keeps state for between udf_init_foo and udf_deinit_foo */
 
33
  initid->ptr= NULL;
 
34
 
 
35
  return 0;
 
36
}
 
37
 
 
38
char *udf_doit_hello_world(UDF_INIT *initid, UDF_ARGS *args, char *result,
 
39
                           unsigned long *length, char *is_null, char *error)
 
40
{
 
41
  /* "result" is preallocated 255 bytes for me, if i want to use it */
 
42
  strncpy(result, "Hello, world!", 255);
 
43
 
 
44
  /* if set to 255 or less, MySQL treats the result as a varchar
 
45
     if set to greater than 255, MySQL treats the result as a blob */
 
46
  *length= strlen("Hello, world!");
 
47
 
 
48
  /* is_null is already zero, this is a demonstration */
 
49
  *is_null= 0;
 
50
 
 
51
  /* error is already zero, this is a demonstration */
 
52
  *error= 0;
 
53
 
 
54
  return result;
 
55
}
 
56
 
 
57
void udf_deinit_hello_world(UDF_INIT *initid)
 
58
{
 
59
  /* if we allocated initid->ptr, free it here */
 
60
  return;
 
61
}
 
62
 
 
63
 
 
64
static int hello_world_plugin_init(void *p)
 
65
{
 
66
  udf_func *udff= (udf_func *) p;
 
67
 
 
68
  udff->name.str= "hello_world";
 
69
  udff->name.length= strlen("hello_world");
 
70
  udff->type= UDFTYPE_FUNCTION;
 
71
  udff->returns= STRING_RESULT;
 
72
  udff->func_init= udf_init_hello_world;
 
73
  udff->func_deinit= udf_deinit_hello_world;
 
74
  udff->func= (Udf_func_any) udf_doit_hello_world;
 
75
 
 
76
  return 0;
 
77
}
 
78
 
 
79
static int hello_world_plugin_deinit(void *p)
 
80
{
 
81
  udf_func *udff = (udf_func *) p;
 
82
 
 
83
  return 0;
 
84
}
 
85
 
 
86
struct st_mysql_udf hello_world_plugin=
 
87
{ MYSQL_UDF_INTERFACE_VERSION  };
 
88
 
 
89
mysql_declare_plugin(hello_world)
 
90
{
 
91
  MYSQL_UDF_PLUGIN,
 
92
  &hello_world_plugin,
 
93
  "hello_world",
 
94
  "Mark Atwood",
 
95
  "Hello, world!",
 
96
  PLUGIN_LICENSE_GPL,
 
97
  hello_world_plugin_init, /* Plugin Init */
 
98
  hello_world_plugin_deinit, /* Plugin Deinit */
 
99
  0x0100,  /* 1.0 */
 
100
  NULL,   /* status variables */
 
101
  NULL,   /* system variables */
 
102
  NULL    /* config options */
 
103
}
 
104
mysql_declare_plugin_end;