22
22
#include <drizzled/plugin/table_function.h>
23
23
#include <drizzled/table_function_container.h>
24
24
#include <drizzled/gettext.h>
25
#include "drizzled/plugin/registry.h"
26
25
#include "drizzled/global_charset_info.h"
27
26
#include "drizzled/session.h"
28
27
#include "drizzled/current_session.h"
39
38
void plugin::TableFunction::init()
41
drizzled::message::Table::StorageEngine *engine;
40
drizzled::message::Engine *engine;
42
41
drizzled::message::Table::TableOptions *table_options;
44
proto.set_name(identifier.getTableName());
43
proto.set_name(getTableLabel());
44
proto.set_schema(identifier.getSchemaName());
45
45
proto.set_type(drizzled::message::Table::FUNCTION);
46
proto.set_creation_timestamp(0);
47
proto.set_update_timestamp(0);
47
49
table_options= proto.mutable_options();
48
50
table_options->set_collation_id(default_charset_info->number);
91
93
void plugin::TableFunction::add_field(const char *label,
92
TableFunction::ColumnType type,
93
uint32_t field_length,
94
TableFunction::ColumnType type,
95
uint32_t field_length,
96
98
drizzled::message::Table::Field *field;
97
99
drizzled::message::Table::Field::FieldOptions *field_options;
113
115
field_options->set_default_null(false);
114
116
field_constraints->set_is_nullable(false);
115
117
case TableFunction::STRING:
116
drizzled::message::Table::Field::StringFieldOptions *string_field_options;
117
field->set_type(drizzled::message::Table::Field::VARCHAR);
119
string_field_options= field->mutable_string_options();
120
string_field_options->set_length(field_length);
119
drizzled::message::Table::Field::StringFieldOptions *string_field_options;
120
field->set_type(drizzled::message::Table::Field::VARCHAR);
122
string_field_options= field->mutable_string_options();
123
string_field_options->set_length(field_length);
126
case TableFunction::VARBINARY:
128
drizzled::message::Table::Field::StringFieldOptions *string_field_options;
129
field->set_type(drizzled::message::Table::Field::VARCHAR);
131
string_field_options= field->mutable_string_options();
132
string_field_options->set_length(field_length);
133
string_field_options->set_collation(my_charset_bin.csname);
134
string_field_options->set_collation_id(my_charset_bin.number);
123
137
case TableFunction::NUMBER: // Currently NUMBER always has a value
124
138
field->set_type(drizzled::message::Table::Field::BIGINT);
125
field_options->set_default_null(false);
126
field_constraints->set_is_nullable(false);
131
143
plugin::TableFunction::Generator::Generator(Field **arg) :
145
session(current_session)
134
147
scs= system_charset_info;
154
167
void plugin::TableFunction::Generator::push(uint64_t arg)
156
169
(*columns_iterator)->store(static_cast<int64_t>(arg), true);
170
(*columns_iterator)->set_notnull();
157
171
columns_iterator++;
160
174
void plugin::TableFunction::Generator::push(int64_t arg)
162
176
(*columns_iterator)->store(arg, false);
177
(*columns_iterator)->set_notnull();
163
178
columns_iterator++;
181
193
void plugin::TableFunction::Generator::push()
183
assert((*columns_iterator)->type() == DRIZZLE_TYPE_VARCHAR);
195
#if 0 // @note this needs to be rewritten such that a drizzled::Field object can determine if it should ever be null
196
assert((*columns_iterator)->getTable()->getShare()->getTableProto()->field((*columns_iterator)->getTable()->getFields() - columns_iterator).constraints().is_nullable());
184
198
(*columns_iterator)->set_null();
185
199
columns_iterator++;
197
(*columns_iterator)->store("TRUE", 4, scs);
211
(*columns_iterator)->store("YES", 3, scs);
201
(*columns_iterator)->store("FALSE", 5, scs);
215
(*columns_iterator)->store("NO", 2, scs);
204
218
columns_iterator++;
207
221
bool plugin::TableFunction::Generator::isWild(const std::string &predicate)
209
Session *session= current_session;
211
if (not session->lex->wild)
223
if (not getSession().lex->wild)
214
226
bool match= wild_case_compare(system_charset_info,
215
227
predicate.c_str(),
216
session->lex->wild->ptr());
228
getSession().lex->wild->ptr());