~ubuntu-branches/ubuntu/trusty/drizzle/trusty

« back to all changes in this revision

Viewing changes to drizzled/plugin/table_function.cc

  • Committer: Bazaar Package Importer
  • Author(s): Monty Taylor
  • Date: 2010-10-02 14:17:48 UTC
  • mfrom: (1.1.1 upstream)
  • mto: (2.1.17 sid)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20101002141748-m6vbfbfjhrw1153e
Tags: 2010.09.1802-1
* New upstream release.
* Removed pid-file argument hack.
* Updated GPL-2 address to be new address.
* Directly copy in drizzledump.1 since debian doesn't have sphinx 1.0 yet.
* Link to jquery from libjs-jquery. Add it as a depend.
* Add drizzled.8 symlink to the install files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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"
38
37
 
39
38
void plugin::TableFunction::init()
40
39
{
41
 
  drizzled::message::Table::StorageEngine *engine;
 
40
  drizzled::message::Engine *engine;
42
41
  drizzled::message::Table::TableOptions *table_options;
43
42
 
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);
46
48
 
47
49
  table_options= proto.mutable_options();
48
50
  table_options->set_collation_id(default_charset_info->number);
89
91
}
90
92
 
91
93
void plugin::TableFunction::add_field(const char *label,
92
 
                              TableFunction::ColumnType type,
93
 
                              uint32_t field_length,
94
 
                              bool is_default_null)
 
94
                                      TableFunction::ColumnType type,
 
95
                                      uint32_t field_length,
 
96
                                      bool is_default_null)
95
97
{
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);
118
 
 
119
 
    string_field_options= field->mutable_string_options();
120
 
    string_field_options->set_length(field_length);
121
 
 
 
118
  {
 
119
    drizzled::message::Table::Field::StringFieldOptions *string_field_options;
 
120
    field->set_type(drizzled::message::Table::Field::VARCHAR);
 
121
 
 
122
    string_field_options= field->mutable_string_options();
 
123
    string_field_options->set_length(field_length);
 
124
  }
 
125
    break;
 
126
  case TableFunction::VARBINARY:
 
127
  {
 
128
    drizzled::message::Table::Field::StringFieldOptions *string_field_options;
 
129
    field->set_type(drizzled::message::Table::Field::VARCHAR);
 
130
 
 
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);
 
135
  }
122
136
    break;
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);
127
139
    break;
128
140
  }
129
141
}
130
142
 
131
143
plugin::TableFunction::Generator::Generator(Field **arg) :
132
 
  columns(arg)
 
144
  columns(arg),
 
145
  session(current_session)
133
146
{
134
147
  scs= system_charset_info;
135
148
}
154
167
void plugin::TableFunction::Generator::push(uint64_t arg)
155
168
{
156
169
  (*columns_iterator)->store(static_cast<int64_t>(arg), true);
 
170
  (*columns_iterator)->set_notnull();
157
171
  columns_iterator++;
158
172
}
159
173
 
160
174
void plugin::TableFunction::Generator::push(int64_t arg)
161
175
{
162
176
  (*columns_iterator)->store(arg, false);
 
177
  (*columns_iterator)->set_notnull();
163
178
  columns_iterator++;
164
179
}
165
180
 
170
185
  assert(arg);
171
186
  length= length ? length : strlen(arg);
172
187
 
173
 
  if (not length)
174
 
    return push();
175
 
 
176
188
  (*columns_iterator)->store(arg, length, scs);
177
189
  (*columns_iterator)->set_notnull();
178
190
  columns_iterator++;
180
192
 
181
193
void plugin::TableFunction::Generator::push()
182
194
{
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());
 
197
#endif
184
198
  (*columns_iterator)->set_null();
185
199
  columns_iterator++;
186
200
}
194
208
{
195
209
  if (arg)
196
210
  {
197
 
    (*columns_iterator)->store("TRUE", 4, scs);
 
211
    (*columns_iterator)->store("YES", 3, scs);
198
212
  }
199
213
  else
200
214
  {
201
 
    (*columns_iterator)->store("FALSE", 5, scs);
 
215
    (*columns_iterator)->store("NO", 2, scs);
202
216
  }
203
217
 
204
218
  columns_iterator++;
206
220
 
207
221
bool plugin::TableFunction::Generator::isWild(const std::string &predicate)
208
222
{
209
 
  Session *session= current_session;
210
 
 
211
 
  if (not session->lex->wild)
 
223
  if (not getSession().lex->wild)
212
224
    return false;
213
225
 
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());
217
229
 
218
230
  return match;
219
231
}