~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/plugin/table_function.cc

  • Committer: Olaf van der Spek
  • Date: 2011-03-29 12:04:36 UTC
  • mto: (2257.1.1 build) (2276.1.2 build)
  • mto: This revision was merged to the branch mainline in revision 2258.
  • Revision ID: olafvdspek@gmail.com-20110329120436-vozkuer8vqgh027p
Always call assert()

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
18
 */
19
19
 
20
 
#include "config.h"
 
20
#include <config.h>
21
21
 
 
22
#include <drizzled/current_session.h>
 
23
#include <drizzled/gettext.h>
 
24
#include <drizzled/global_charset_info.h>
22
25
#include <drizzled/plugin/table_function.h>
 
26
#include <drizzled/session.h>
 
27
#include <drizzled/show.h>
23
28
#include <drizzled/table_function_container.h>
24
 
#include <drizzled/gettext.h>
25
 
#include "drizzled/global_charset_info.h"
26
 
#include "drizzled/session.h"
27
 
#include "drizzled/current_session.h"
 
29
#include <drizzled/sql_lex.h>
28
30
 
29
31
#include <vector>
30
32
 
31
 
namespace drizzled
32
 
{
 
33
namespace drizzled {
33
34
 
34
35
static TableFunctionContainer table_functions;
35
36
 
36
37
void plugin::TableFunction::init()
37
38
{
38
 
  drizzled::message::Engine *engine;
39
 
  drizzled::message::Table::TableOptions *table_options;
40
 
 
41
 
  proto.set_name(getTableLabel());
42
 
  proto.set_schema(identifier.getSchemaName());
 
39
  drizzled::message::table::init(proto, getTableLabel(), identifier.getSchemaName(), "FunctionEngine");
43
40
  proto.set_type(drizzled::message::Table::FUNCTION);
44
41
  proto.set_creation_timestamp(0);
45
42
  proto.set_update_timestamp(0);
46
 
 
47
 
  table_options= proto.mutable_options();
48
 
  table_options->set_collation_id(default_charset_info->number);
49
 
  table_options->set_collation(default_charset_info->name);
50
 
 
51
 
  engine= proto.mutable_engine();
52
 
  engine->set_name("FunctionEngine");
 
43
  message::set_is_replicated(proto, false);
53
44
}
54
45
 
55
46
bool plugin::TableFunction::addPlugin(plugin::TableFunction *tool)
56
47
{
57
48
  assert(tool != NULL);
58
 
  table_functions.addFunction(tool); 
 
49
  table_functions.addFunction(tool);
59
50
  return false;
60
51
}
61
52
 
70
61
  table_functions.getNames(arg, set_of_names);
71
62
}
72
63
 
 
64
LEX& plugin::TableFunction::Generator::lex()
 
65
{
 
66
        return getSession().lex();
 
67
}
 
68
 
 
69
statement::Statement& plugin::TableFunction::Generator::statement()
 
70
{
 
71
        return *lex().statement;
 
72
}
 
73
 
73
74
plugin::TableFunction::Generator *plugin::TableFunction::generator(Field **arg)
74
75
{
75
76
  return new Generator(arg);
103
104
  field_options= field->mutable_options();
104
105
  field_constraints= field->mutable_constraints();
105
106
  field_options->set_default_null(is_default_null);
106
 
  field_constraints->set_is_nullable(is_default_null);
 
107
  field_constraints->set_is_notnull(not is_default_null);
107
108
 
108
 
  switch (type) 
 
109
  switch (type)
109
110
  {
110
 
  default:
111
 
  case TableFunction::BOOLEAN: // Currently BOOLEAN always has a value
112
 
    field_length= 5;
113
 
    field_options->set_default_null(false);
114
 
    field_constraints->set_is_nullable(false);
115
111
  case TableFunction::STRING:
116
112
    {
117
113
      drizzled::message::Table::Field::StringFieldOptions *string_field_options;
141
137
      string_field_options->set_collation_id(my_charset_bin.number);
142
138
    }
143
139
    break;
144
 
  case TableFunction::NUMBER: // Currently NUMBER always has a value
145
 
    field->set_type(drizzled::message::Table::Field::BIGINT);
 
140
  case TableFunction::NUMBER:
 
141
    field->set_type(drizzled::message::Table::Field::BIGINT);
 
142
    break;
 
143
  case TableFunction::SIZE:
 
144
    field->set_type(drizzled::message::Table::Field::BIGINT);
 
145
    field_constraints->set_is_unsigned(true);
 
146
    break;
 
147
  case TableFunction::BOOLEAN: // Currently BOOLEAN always has a value
 
148
    field->set_type(drizzled::message::Table::Field::BOOLEAN);
 
149
    field_constraints->set_is_unsigned(true);
146
150
    break;
147
151
  }
148
152
}
229
233
 
230
234
bool plugin::TableFunction::Generator::isWild(const std::string &predicate)
231
235
{
232
 
  if (not getSession().lex->wild)
 
236
  if (not lex().wild)
233
237
    return false;
234
238
 
235
239
  bool match= wild_case_compare(system_charset_info,
236
240
                                predicate.c_str(),
237
 
                                getSession().lex->wild->ptr());
 
241
                                lex().wild->ptr());
238
242
 
239
243
  return match;
240
244
}