17
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22
#include <drizzled/current_session.h>
23
#include <drizzled/gettext.h>
24
#include <drizzled/global_charset_info.h>
25
22
#include <drizzled/plugin/table_function.h>
26
#include <drizzled/session.h>
27
#include <drizzled/show.h>
28
23
#include <drizzled/table_function_container.h>
24
#include <drizzled/gettext.h>
25
#include "drizzled/plugin/registry.h"
26
#include "drizzled/global_charset_info.h"
27
#include "drizzled/session.h"
28
#include "drizzled/current_session.h"
37
39
void plugin::TableFunction::init()
39
drizzled::message::table::init(proto, getTableLabel(), identifier.getSchemaName(), "FunctionEngine");
41
drizzled::message::Table::StorageEngine *engine;
42
drizzled::message::Table::TableOptions *table_options;
44
proto.set_name(getTableLabel());
45
proto.set_schema(identifier.getSchemaName());
40
46
proto.set_type(drizzled::message::Table::FUNCTION);
41
47
proto.set_creation_timestamp(0);
42
48
proto.set_update_timestamp(0);
44
proto.mutable_options()->set_dont_replicate(true);
50
table_options= proto.mutable_options();
51
table_options->set_collation_id(default_charset_info->number);
52
table_options->set_collation(default_charset_info->name);
54
engine= proto.mutable_engine();
55
engine->set_name("FunctionEngine");
47
58
bool plugin::TableFunction::addPlugin(plugin::TableFunction *tool)
54
plugin::TableFunction *plugin::TableFunction::getFunction(const std::string &arg)
65
plugin::TableFunction *plugin::TableFunction::getFunction(const string &arg)
56
67
return table_functions.getFunction(arg);
59
void plugin::TableFunction::getNames(const std::string &arg,
60
std::set<std::string> &set_of_names)
70
void plugin::TableFunction::getNames(const string &arg,
71
set<std::string> &set_of_names)
62
73
table_functions.getNames(arg, set_of_names);
95
106
field_options= field->mutable_options();
96
107
field_constraints= field->mutable_constraints();
97
108
field_options->set_default_null(is_default_null);
98
field_constraints->set_is_notnull(not is_default_null);
109
field_constraints->set_is_nullable(is_default_null);
114
case TableFunction::BOOLEAN: // Currently BOOLEAN always has a value
116
field_options->set_default_null(false);
117
field_constraints->set_is_nullable(false);
102
118
case TableFunction::STRING:
104
drizzled::message::Table::Field::StringFieldOptions *string_field_options;
105
if (field_length >= TABLE_FUNCTION_BLOB_SIZE)
107
field->set_type(drizzled::message::Table::Field::BLOB);
108
string_field_options= field->mutable_string_options();
109
string_field_options->set_collation_id(default_charset_info->number);
110
string_field_options->set_collation(default_charset_info->name);
114
field->set_type(drizzled::message::Table::Field::VARCHAR);
115
string_field_options= field->mutable_string_options();
116
string_field_options->set_length(field_length);
120
drizzled::message::Table::Field::StringFieldOptions *string_field_options;
121
field->set_type(drizzled::message::Table::Field::VARCHAR);
123
string_field_options= field->mutable_string_options();
124
string_field_options->set_length(field_length);
120
127
case TableFunction::VARBINARY:
122
drizzled::message::Table::Field::StringFieldOptions *string_field_options;
123
field->set_type(drizzled::message::Table::Field::VARCHAR);
129
drizzled::message::Table::Field::StringFieldOptions *string_field_options;
130
field->set_type(drizzled::message::Table::Field::VARCHAR);
125
string_field_options= field->mutable_string_options();
126
string_field_options->set_length(field_length);
127
string_field_options->set_collation(my_charset_bin.csname);
128
string_field_options->set_collation_id(my_charset_bin.number);
131
case TableFunction::NUMBER:
132
field->set_type(drizzled::message::Table::Field::BIGINT);
134
case TableFunction::SIZE:
135
field->set_type(drizzled::message::Table::Field::BIGINT);
136
field_constraints->set_is_unsigned(true);
138
case TableFunction::BOOLEAN: // Currently BOOLEAN always has a value
139
field->set_type(drizzled::message::Table::Field::BOOLEAN);
140
field_constraints->set_is_unsigned(true);
132
string_field_options= field->mutable_string_options();
133
string_field_options->set_length(field_length);
134
string_field_options->set_collation(my_charset_bin.csname);
135
string_field_options->set_collation_id(my_charset_bin.number);
138
case TableFunction::NUMBER: // Currently NUMBER always has a value
139
field->set_type(drizzled::message::Table::Field::BIGINT);
140
field_options->set_default_null(false);
141
field_constraints->set_is_nullable(false);
145
146
plugin::TableFunction::Generator::Generator(Field **arg) :
147
session(current_session)
149
149
scs= system_charset_info;
215
(*columns_iterator)->store("YES", 3, scs);
211
(*columns_iterator)->store("TRUE", 4, scs);
219
(*columns_iterator)->store("NO", 2, scs);
215
(*columns_iterator)->store("FALSE", 5, scs);
222
218
columns_iterator++;
225
221
bool plugin::TableFunction::Generator::isWild(const std::string &predicate)
227
if (not getSession().getLex()->wild)
223
Session *session= current_session;
225
if (not session->lex->wild)
230
228
bool match= wild_case_compare(system_charset_info,
231
229
predicate.c_str(),
232
getSession().getLex()->wild->ptr());
230
session->lex->wild->ptr());