~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/field/boolean.cc

  • Committer: Brian Aker
  • Date: 2011-02-22 06:12:02 UTC
  • mfrom: (2190.1.6 drizzle-build)
  • Revision ID: brian@tangent.org-20110222061202-k03czxykqy4x9hjs
List update, header fixes, multiple symbols, and David deletes some code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 */
20
20
 
21
21
 
22
 
#include "config.h"
 
22
#include <config.h>
23
23
 
24
24
#include <algorithm>
25
25
 
26
 
#include "drizzled/field/boolean.h"
 
26
#include <drizzled/field/boolean.h>
 
27
#include <drizzled/type/boolean.h>
27
28
 
28
 
#include "drizzled/error.h"
29
 
#include "drizzled/internal/my_sys.h"
30
 
#include "drizzled/session.h"
31
 
#include "drizzled/table.h"
32
 
#include "drizzled/temporal.h"
 
29
#include <drizzled/error.h>
 
30
#include <drizzled/internal/my_sys.h>
 
31
#include <drizzled/session.h>
 
32
#include <drizzled/table.h>
 
33
#include <drizzled/temporal.h>
33
34
 
34
35
union set_true_t {
35
36
  unsigned char byte;
59
60
        field_name_arg),
60
61
  ansi_display(ansi_display_arg)
61
62
  {
 
63
    if (ansi_display)
 
64
      flags|= UNSIGNED_FLAG;
62
65
  }
63
66
 
64
67
int Boolean::cmp(const unsigned char *a, const unsigned char *b)
70
73
{
71
74
  ASSERT_COLUMN_MARKED_FOR_WRITE;
72
75
 
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 (strcasecmp(from, "FALSE") == 0))
93
 
  {
94
 
    setFalse();
95
 
  }
96
 
  if ((length == 4) and (strcasecmp(from, "TRUE") == 0))
97
 
  {
98
 
    setTrue();
99
 
  }
100
 
  else if ((length == 5) and (strcasecmp(from, "FALSE") == 0))
101
 
  {
102
 
    setFalse();
103
 
  }
104
 
  else if ((length == 3) and (strcasecmp(from, "YES") == 0))
105
 
  {
106
 
    setTrue();
107
 
  }
108
 
  else if ((length == 2) and (strcasecmp(from, "NO") == 0))
109
 
  {
110
 
    setFalse();
111
 
  }
112
 
  else
 
76
  bool result;
 
77
  if (not type::convert(result, from, length))
113
78
  {
114
79
    my_error(ER_INVALID_BOOLEAN_VALUE, MYF(0), from);
115
 
    return 1; // invalid
 
80
    return 1;
 
81
  }
 
82
 
 
83
  if (result)
 
84
  {
 
85
    setTrue();
 
86
  }
 
87
  else
 
88
  {
 
89
    setFalse();
116
90
  }
117
91
 
118
92
  return 0;
135
109
int Boolean::store_decimal(const drizzled::type::Decimal *dec)
136
110
{
137
111
  ASSERT_COLUMN_MARKED_FOR_WRITE;
138
 
  if (dec->is_zero())
 
112
  if (dec->isZero())
139
113
  {
140
114
    setFalse();
141
115
    return 0;
151
125
  res.set_ascii(STRING_WITH_LEN("boolean"));
152
126
}
153
127
 
154
 
double Boolean::val_real()
155
 
{
156
 
  ASSERT_COLUMN_MARKED_FOR_READ;
157
 
  return isTrue();
158
 
}
159
 
 
160
 
int64_t Boolean::val_int()
161
 
{
162
 
  ASSERT_COLUMN_MARKED_FOR_READ;
163
 
  return isTrue();
164
 
}
165
 
 
166
 
String *Boolean::val_str(String *val_buffer, String *)
167
 
{
168
 
  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
 
  }
 
128
double Boolean::val_real() const
 
129
{
 
130
  ASSERT_COLUMN_MARKED_FOR_READ;
 
131
  return isTrue();
 
132
}
 
133
 
 
134
int64_t Boolean::val_int() const
 
135
{
 
136
  ASSERT_COLUMN_MARKED_FOR_READ;
 
137
  return isTrue();
 
138
}
 
139
 
 
140
String *Boolean::val_str(String *val_buffer, String *) const
 
141
{
 
142
  ASSERT_COLUMN_MARKED_FOR_READ;
 
143
 
 
144
  (void)type::convert(*val_buffer, isTrue(), ansi_display);
201
145
 
202
146
  return val_buffer;
203
147
}
204
148
 
205
 
type::Decimal *Boolean::val_decimal(type::Decimal *dec)
 
149
type::Decimal *Boolean::val_decimal(type::Decimal *dec) const
206
150
{
207
151
  if (isTrue())
208
152
  {