~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_udf.cc

  • Committer: Brian Aker
  • Date: 2009-04-09 15:03:26 UTC
  • mfrom: (971.1.44 mordred)
  • Revision ID: brian@gaz-20090409150326-cu50yn12esijpy1c
Merge Monty

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
#include <drizzled/server_includes.h>
18
18
#include <drizzled/gettext.h>
19
19
#include <drizzled/sql_udf.h>
 
20
#include <drizzled/registry.h>
20
21
 
21
 
#include <map>
22
22
#include <string>
23
23
 
24
24
using namespace std;
25
25
 
26
26
static bool udf_startup= false; /* We do not lock because startup is single threaded */
27
 
static map<string, Function_builder *> udf_map;
28
 
 
 
27
static drizzled::Registry<Function_builder *> udf_registry;
29
28
 
30
29
/* This is only called if using_udf_functions != 0 */
31
30
Function_builder *find_udf(const char *name, uint32_t length)
32
31
{
33
 
 
34
 
  /**
35
 
   * @todo: check without transform, then check with transform if needed
36
 
   */
37
 
  Function_builder *udf= NULL;
38
 
 
39
 
  if (udf_startup == false)
40
 
    return NULL;
41
 
 
42
 
  string find_str(name, length);
43
 
  transform(find_str.begin(), find_str.end(),
44
 
            find_str.begin(), ::tolower);
45
 
 
46
 
  map<string, Function_builder *>::iterator find_iter;
47
 
  find_iter=  udf_map.find(find_str);
48
 
  if (find_iter != udf_map.end())
49
 
    udf= (*find_iter).second;
50
 
 
51
 
  return (udf);
 
32
  return udf_registry.find(name, length);
52
33
}
53
34
 
54
35
static bool add_udf(Function_builder *udf)
55
36
{
56
 
  /**
57
 
   * @todo: add all lower and all upper version
58
 
   */
59
 
  string add_str= udf->get_name();
60
 
  transform(add_str.begin(), add_str.end(),
61
 
            add_str.begin(), ::tolower);
62
 
 
63
 
  udf_map[add_str]= udf;
64
 
 
65
 
  using_udf_functions= 1;
66
 
 
67
 
  return true;
 
37
  return udf_registry.add(udf);
68
38
}
69
39
 
70
 
static bool remove_udf(Function_builder *udf)
 
40
static void remove_udf(Function_builder *udf)
71
41
{
72
 
  return udf_map.erase(udf->get_name());
 
42
  udf_registry.remove(udf);
73
43
}
74
44
 
75
45
int initialize_udf(st_plugin_int *plugin)
92
62
  else
93
63
    return 1;
94
64
 
95
 
  if (!add_udf(f))
 
65
  if (add_udf(f))
96
66
    return 1;
97
67
 
98
68
  plugin->data= f;