~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/field/double.cc

  • Committer: Stewart Smith
  • Date: 2008-09-15 07:13:59 UTC
  • mfrom: (383.1.21 drizzle)
  • mto: This revision was merged to the branch mainline in revision 408.
  • Revision ID: stewart@flamingspork.com-20080915071359-f8bznznyaiqrtqxa
merged

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
#pragma implementation                          // gcc: Class implementation
23
23
#endif
24
24
 
 
25
#include <drizzled/server_includes.h>
25
26
#include <drizzled/field/double.h>
 
27
#include <drizzled/drizzled_error_messages.h>
26
28
 
27
29
/****************************************************************************
28
30
  double precision floating point numbers
29
31
****************************************************************************/
30
32
 
31
 
int Field_double::store(const char *from,uint len,CHARSET_INFO *cs)
 
33
int Field_double::store(const char *from,uint len, const CHARSET_INFO * const cs)
32
34
{
33
35
  int error;
34
36
  char *end;
35
37
  double nr= my_strntod(cs,(char*) from, len, &end, &error);
36
38
  if (error || (!len || (((uint) (end-from) != len) && table->in_use->count_cuted_fields)))
37
39
  {
38
 
    set_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
 
40
    set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN,
39
41
                (error ? ER_WARN_DATA_OUT_OF_RANGE : ER_WARN_DATA_TRUNCATED), 1);
40
42
    error= error ? 1 : 2;
41
43
  }
81
83
  {
82
84
    res= 0;
83
85
    set_null();
84
 
    set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
 
86
    set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
85
87
    goto end;
86
88
  }
87
89
  else if (unsigned_flag && res < 0)
88
90
  {
89
91
    res= 0;
90
 
    set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
 
92
    set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
91
93
    goto end;
92
94
  }
93
95
 
112
114
  if (res < -max_value)
113
115
  {
114
116
   res= -max_value;
115
 
   set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
 
117
   set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
116
118
  }
117
119
  else if (res > max_value)
118
120
  {
119
121
    res= max_value;
120
 
    set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
 
122
    set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
121
123
  }
122
124
  else
123
125
    error= 0;
177
179
warn:
178
180
  {
179
181
    char buf[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
180
 
    String tmp(buf, sizeof(buf), &my_charset_latin1), *str;
 
182
    String tmp(buf, sizeof(buf), &my_charset_utf8_general_ci), *str;
181
183
    str= val_str(&tmp, 0);
182
 
    push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
 
184
    push_warning_printf(current_thd, DRIZZLE_ERROR::WARN_LEVEL_WARN,
183
185
                        ER_TRUNCATED_WRONG_VALUE,
184
186
                        ER(ER_TRUNCATED_WRONG_VALUE), "INTEGER",
185
187
                        str->c_ptr());
208
210
#endif
209
211
    doubleget(nr,ptr);
210
212
 
211
 
  uint to_length=max(field_length, DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE);
 
213
  uint to_length=max(field_length, (uint32_t)DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE);
212
214
  val_buffer->alloc(to_length);
213
215
  char *to=(char*) val_buffer->ptr();
214
216
  size_t len;
286
288
 
287
289
void Field_double::sql_type(String &res) const
288
290
{
289
 
  CHARSET_INFO *cs=res.charset();
 
291
  const CHARSET_INFO * const cs=res.charset();
290
292
  if (dec == NOT_FIXED_DEC)
291
293
  {
292
294
    res.set_ascii(STRING_WITH_LEN("double"));