~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/field/boolean.cc

  • Committer: Brian Aker
  • Date: 2011-02-03 20:32:09 UTC
  • mfrom: (2139.1.4 drizzle-build)
  • Revision ID: brian@tangent.org-20110203203209-r1t4knmy15x5n1w2
Rollup.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#include <algorithm>
25
25
 
26
26
#include "drizzled/field/boolean.h"
 
27
#include "drizzled/type/boolean.h"
27
28
 
28
29
#include "drizzled/error.h"
29
30
#include "drizzled/internal/my_sys.h"
70
71
{
71
72
  ASSERT_COLUMN_MARKED_FOR_WRITE;
72
73
 
73
 
  if (length == 1)
74
 
  {
75
 
    switch (from[0])
76
 
    {
77
 
    case 'y': case 'Y':
78
 
    case 't': case 'T': // PG compatibility
79
 
      setTrue();
80
 
      return 0;
81
 
 
82
 
    case 'n': case 'N':
83
 
    case 'f': case 'F': // PG compatibility
84
 
      setFalse();
85
 
      return 0;
86
 
 
87
 
    default:
88
 
      my_error(ER_INVALID_BOOLEAN_VALUE, MYF(0), from);
89
 
      return 1; // invalid
90
 
    }
91
 
  }
92
 
  else if ((length == 5) and (my_strcasecmp(system_charset_info, from, "FALSE") == 0))
93
 
  {
94
 
    setFalse();
95
 
  }
96
 
  if ((length == 4) and (my_strcasecmp(system_charset_info, from, "TRUE") == 0))
97
 
  {
98
 
    setTrue();
99
 
  }
100
 
  else if ((length == 5) and (my_strcasecmp(system_charset_info, from, "FALSE") == 0))
101
 
  {
102
 
    setFalse();
103
 
  }
104
 
  else if ((length == 3) and (my_strcasecmp(system_charset_info, from, "YES") == 0))
105
 
  {
106
 
    setTrue();
107
 
  }
108
 
  else if ((length == 2) and (my_strcasecmp(system_charset_info, from, "NO") == 0))
109
 
  {
110
 
    setFalse();
111
 
  }
112
 
  else
 
74
  bool result;
 
75
  if (not type::convert(result, from, length))
113
76
  {
114
77
    my_error(ER_INVALID_BOOLEAN_VALUE, MYF(0), from);
115
 
    return 1; // invalid
 
78
    return 1;
 
79
  }
 
80
 
 
81
  if (result)
 
82
  {
 
83
    setTrue();
 
84
  }
 
85
  else
 
86
  {
 
87
    setFalse();
116
88
  }
117
89
 
118
90
  return 0;
135
107
int Boolean::store_decimal(const drizzled::type::Decimal *dec)
136
108
{
137
109
  ASSERT_COLUMN_MARKED_FOR_WRITE;
138
 
  if (dec->is_zero())
 
110
  if (dec->isZero())
139
111
  {
140
112
    setFalse();
141
113
    return 0;
166
138
String *Boolean::val_str(String *val_buffer, String *)
167
139
{
168
140
  ASSERT_COLUMN_MARKED_FOR_READ;
169
 
  const CHARSET_INFO * const cs= &my_charset_bin;
170
 
  uint32_t mlength= (5) * cs->mbmaxlen;
171
 
 
172
 
  val_buffer->alloc(mlength);
173
 
  char *buffer=(char*) val_buffer->c_ptr();
174
 
 
175
 
  if (isTrue())
176
 
  {
177
 
    if (ansi_display)
178
 
    {
179
 
      memcpy(buffer, "YES", 3);
180
 
      val_buffer->length(3);
181
 
    }
182
 
    else
183
 
    {
184
 
      memcpy(buffer, "TRUE", 4);
185
 
      val_buffer->length(4);
186
 
    }
187
 
  }
188
 
  else
189
 
  {
190
 
    if (ansi_display)
191
 
    {
192
 
      memcpy(buffer, "NO", 2);
193
 
      val_buffer->length(2);
194
 
    }
195
 
    else
196
 
    {
197
 
      memcpy(buffer, "FALSE", 5);
198
 
      val_buffer->length(5);
199
 
    }
200
 
  }
 
141
 
 
142
  (void)type::convert(*val_buffer, isTrue(), ansi_display);
201
143
 
202
144
  return val_buffer;
203
145
}