~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/plugin/function.cc

Remove PLUGIN and MODULES.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 */
20
20
 
21
21
/* This implements 'user defined functions' */
22
 
#include <drizzled/server_includes.h>
 
22
#include "config.h"
23
23
#include <drizzled/gettext.h>
24
 
#include <drizzled/name_map.h>
 
24
#include "drizzled/hash.h"
25
25
#include "drizzled/plugin/function.h"
26
26
 
27
27
using namespace std;
29
29
namespace drizzled
30
30
{
31
31
 
32
 
NameMap<const plugin::Function *> udf_registry;
 
32
typedef hash_map<string, const plugin::Function *> UdfMap;
 
33
static UdfMap udf_registry;
33
34
 
34
35
bool plugin::Function::addPlugin(const plugin::Function *udf)
35
36
{
36
 
  if (udf_registry.add(udf))
37
 
  {
38
 
    errmsg_printf(ERRMSG_LVL_ERROR,
39
 
                  _("Could not add Function!"));
 
37
  string lower_name(udf->getName());
 
38
  transform(lower_name.begin(), lower_name.end(),
 
39
            lower_name.begin(), ::tolower);
 
40
  if (udf_registry.find(lower_name) != udf_registry.end())
 
41
  {
 
42
    errmsg_printf(ERRMSG_LVL_ERROR,
 
43
                  _("A function named %s already exists!\n"),
 
44
                  udf->getName().c_str());
 
45
    return true;
 
46
  }
 
47
  pair<UdfMap::iterator, bool> ret=
 
48
    udf_registry.insert(make_pair(lower_name, udf));
 
49
  if (ret.second == false)
 
50
  {
 
51
    errmsg_printf(ERRMSG_LVL_ERROR,
 
52
                  _("Could not add Function!\n"));
40
53
    return true;
41
54
  }
42
55
  return false;
45
58
 
46
59
void plugin::Function::removePlugin(const plugin::Function *udf)
47
60
{
48
 
  udf_registry.remove(udf);
 
61
  string lower_name(udf->getName());
 
62
  transform(lower_name.begin(), lower_name.end(),
 
63
            lower_name.begin(), ::tolower);
 
64
  udf_registry.erase(lower_name);
49
65
}
50
66
 
51
67
const plugin::Function *plugin::Function::get(const char *name, size_t length)
52
68
{
53
 
  return udf_registry.find(name, length);
 
69
  string lower_name(name, length);
 
70
  transform(lower_name.begin(), lower_name.end(),
 
71
            lower_name.begin(), ::tolower);
 
72
  UdfMap::iterator iter= udf_registry.find(lower_name);
 
73
  if (iter == udf_registry.end())
 
74
  {
 
75
    return NULL;
 
76
  }
 
77
  return (*iter).second;
54
78
}
55
79
 
56
80
} /* namespace drizzled */