~drizzle-trunk/drizzle/development

1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
1999.6.1 by kalebral at gmail
update Copyright strings to a more common format to help with creating the master debian copyright file
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
5
 *  Copyright (C) 2010 Stewart Smith
6
 *
7
 *  This program is free software; you can redistribute it and/or modify
8
 *  it under the terms of the GNU General Public License as published by
9
 *  the Free Software Foundation; version 2 of the License.
10
 *
11
 *  This program is distributed in the hope that it will be useful,
12
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 *  GNU General Public License for more details.
15
 *
16
 *  You should have received a copy of the GNU General Public License
17
 *  along with this program; if not, write to the Free Software
18
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 */
20
2173.2.1 by Monty Taylor
Fixes incorrect usage of include
21
#include <config.h>
2154.2.4 by Brian Aker
This fixes 716459
22
2281.5.1 by Muhammad Umair
Merged charset declarations of global_charset_info.h and charset_info.h into charset.h header file.
23
#include <drizzled/charset.h>
2154.2.4 by Brian Aker
This fixes 716459
24
#include <drizzled/function/str/strfunc.h>
25
#include <drizzled/item/func.h>
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
26
#include <drizzled/plugin/function.h>
2154.2.4 by Brian Aker
This fixes 716459
27
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
28
#include <uuid/uuid.h>
29
30
#define UUID_LENGTH (8+1+4+1+4+1+4+1+12)
31
1996.2.1 by Brian Aker
uuid type code.
32
namespace plugin {
33
namespace uuid {
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
34
1996.2.1 by Brian Aker
uuid type code.
35
class Generate: public drizzled::Item_str_func
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
36
{
37
public:
1996.2.1 by Brian Aker
uuid type code.
38
  Generate(): drizzled::Item_str_func() {}
39
  void fix_length_and_dec()
40
  {
41
    collation.set(drizzled::system_charset_info);
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
42
    /*
43
       NOTE! uuid() should be changed to use 'ascii'
44
       charset when hex(), format(), md5(), etc, and implicit
45
       number-to-string conversion will use 'ascii'
46
    */
1996.2.1 by Brian Aker
uuid type code.
47
    max_length= UUID_LENGTH * drizzled::system_charset_info->mbmaxlen;
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
48
  }
49
  const char *func_name() const{ return "uuid"; }
1996.2.1 by Brian Aker
uuid type code.
50
  drizzled::String *val_str(drizzled::String *);
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
51
};
52
1996.2.1 by Brian Aker
uuid type code.
53
drizzled::String *Generate::val_str(drizzled::String *str)
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
54
{
55
  uuid_t uu;
56
  char *uuid_string;
57
58
  /* 36 characters for uuid string +1 for NULL */
59
  str->realloc(UUID_LENGTH+1);
60
  str->length(UUID_LENGTH);
1996.2.1 by Brian Aker
uuid type code.
61
  str->set_charset(drizzled::system_charset_info);
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
62
  uuid_string= (char *) str->ptr();
1996.2.1 by Brian Aker
uuid type code.
63
  uuid_generate(uu);
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
64
  uuid_unparse(uu, uuid_string);
65
66
  return str;
67
}
68
1996.2.1 by Brian Aker
uuid type code.
69
} // uuid
70
} // plugin
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
71
1530.2.6 by Monty Taylor
Moved plugin::Context to module::Context.
72
static int initialize(drizzled::module::Context &context)
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
73
{
1996.2.1 by Brian Aker
uuid type code.
74
  context.add(new drizzled::plugin::Create_function<plugin::uuid::Generate>("uuid"));
75
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
76
  return 0;
77
}
78
79
DRIZZLE_DECLARE_PLUGIN
80
{
81
  DRIZZLE_VERSION_ID,
82
  "uuid",
1996.2.1 by Brian Aker
uuid type code.
83
  "1.1",
84
  "Stewart Smith, Brian Aker",
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
85
  "UUID() function using libuuid",
1996.2.1 by Brian Aker
uuid type code.
86
  drizzled::PLUGIN_LICENSE_GPL,
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
87
  initialize, /* Plugin Init */
2095.3.1 by Monty Taylor
Re-purpose the old plugin sysvar slot in the struct to be a depends list.
88
  NULL,   /* depends */
1300.4.5 by Stewart Smith
convert UUID() to plugin. We move the libuuid requirement to the UUID() function plugin as it's not neeeded anywhere else
89
  NULL    /* config options */
90
}
91
DRIZZLE_DECLARE_PLUGIN_END;