~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/field/enum.cc

  • Committer: Monty Taylor
  • Date: 2008-10-05 01:41:06 UTC
  • Revision ID: monty@inaugust.com-20081005014106-bulqe4kp7i6ipts1
Moved qsort declarations.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
19
 */
20
20
 
 
21
#ifdef USE_PRAGMA_IMPLEMENTATION
 
22
#pragma implementation                          // gcc: Class implementation
 
23
#endif
21
24
 
22
25
#include <drizzled/server_includes.h>
23
26
#include <drizzled/field/enum.h>
42
45
void Field_enum::store_type(uint64_t value)
43
46
{
44
47
  switch (packlength) {
45
 
  case 1: ptr[0]= (unsigned char) value;  break;
 
48
  case 1: ptr[0]= (uchar) value;  break;
46
49
  case 2:
47
50
#ifdef WORDS_BIGENDIAN
48
51
  if (table->s->db_low_byte_first)
83
86
    (if there isn't a empty value in the enum)
84
87
*/
85
88
 
86
 
int Field_enum::store(const char *from, uint32_t length, const CHARSET_INFO * const cs)
 
89
int Field_enum::store(const char *from, uint length, const CHARSET_INFO * const cs)
87
90
{
88
91
  int err= 0;
89
92
  uint32_t not_used;
93
96
  /* Convert character set if necessary */
94
97
  if (String::needs_conversion(length, cs, field_charset, &not_used))
95
98
  { 
96
 
    uint32_t dummy_errors;
 
99
    uint dummy_errors;
97
100
    tmpstr.copy(from, length, cs, field_charset, &dummy_errors);
98
101
    from= tmpstr.ptr();
99
102
    length=  tmpstr.length();
101
104
 
102
105
  /* Remove end space */
103
106
  length= field_charset->cset->lengthsp(field_charset, from, length);
104
 
  uint32_t tmp=find_type2(typelib, from, length, field_charset);
 
107
  uint tmp=find_type2(typelib, from, length, field_charset);
105
108
  if (!tmp)
106
109
  {
107
110
    if (length < 6) // Can't be more than 99999 enums
211
214
 
212
215
   @returns number of bytes written to metadata_ptr
213
216
*/
214
 
int Field_enum::do_save_field_metadata(unsigned char *metadata_ptr)
 
217
int Field_enum::do_save_field_metadata(uchar *metadata_ptr)
215
218
{
216
219
  *metadata_ptr= real_type();
217
220
  *(metadata_ptr + 1)= pack_length();
222
225
String *Field_enum::val_str(String *val_buffer __attribute__((unused)),
223
226
                            String *val_ptr)
224
227
{
225
 
  uint32_t tmp=(uint) Field_enum::val_int();
 
228
  uint tmp=(uint) Field_enum::val_int();
226
229
  if (!tmp || tmp > typelib->count)
227
230
    val_ptr->set("", 0, field_charset);
228
231
  else
232
235
  return val_ptr;
233
236
}
234
237
 
235
 
int Field_enum::cmp(const unsigned char *a_ptr, const unsigned char *b_ptr)
 
238
int Field_enum::cmp(const uchar *a_ptr, const uchar *b_ptr)
236
239
{
237
 
  unsigned char *old= ptr;
238
 
  ptr= (unsigned char*) a_ptr;
 
240
  uchar *old= ptr;
 
241
  ptr= (uchar*) a_ptr;
239
242
  uint64_t a=Field_enum::val_int();
240
 
  ptr= (unsigned char*) b_ptr;
 
243
  ptr= (uchar*) b_ptr;
241
244
  uint64_t b=Field_enum::val_int();
242
245
  ptr= old;
243
246
  return (a < b) ? -1 : (a > b) ? 1 : 0;
244
247
}
245
248
 
246
 
void Field_enum::sort_string(unsigned char *to,uint32_t length __attribute__((unused)))
 
249
void Field_enum::sort_string(uchar *to,uint length __attribute__((unused)))
247
250
{
248
251
  uint64_t value=Field_enum::val_int();
249
252
  to+=packlength-1;
250
 
  for (uint32_t i=0 ; i < packlength ; i++)
 
253
  for (uint i=0 ; i < packlength ; i++)
251
254
  {
252
 
    *to-- = (unsigned char) (value & 255);
 
255
    *to-- = (uchar) (value & 255);
253
256
    value>>=8;
254
257
  }
255
258
}
264
267
  res.append(STRING_WITH_LEN("enum("));
265
268
 
266
269
  bool flag=0;
267
 
  uint32_t *len= typelib->type_lengths;
 
270
  uint *len= typelib->type_lengths;
268
271
  for (const char **pos= typelib->type_names; *pos; pos++, len++)
269
272
  {
270
 
    uint32_t dummy_errors;
 
273
    uint dummy_errors;
271
274
    if (flag)
272
275
      res.append(',');
273
276
    /* convert to res.charset() == utf8, then quote */
287
290
    res->typelib= copy_typelib(root, typelib);
288
291
  return res;
289
292
}
 
293
 
 
294
 
 
295
/**
 
296
  @retval
 
297
    1  if the fields are equally defined
 
298
  @retval
 
299
    0  if the fields are unequally defined
 
300
*/