~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/field.cc

  • Committer: Monty Taylor
  • Date: 2008-10-16 06:33:57 UTC
  • mfrom: (511.2.2 more-warnings)
  • mto: This revision was merged to the branch mainline in revision 521.
  • Revision ID: monty@inaugust.com-20081016063357-vz18dqzdxh2l4nni
Merged in more warnings again.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1042
1042
}
1043
1043
 
1044
1044
 
1045
 
/****************************************************************************
1046
 
** tiny int
1047
 
****************************************************************************/
1048
 
 
1049
 
int Field_tiny::store(const char *from,uint32_t len, const CHARSET_INFO * const cs)
1050
 
{
1051
 
  int error;
1052
 
  int64_t rnd;
1053
 
  
1054
 
  error= get_int(cs, from, len, &rnd, 255, -128, 127);
1055
 
  ptr[0]= (char) rnd;
1056
 
  return error;
1057
 
}
1058
 
 
1059
 
 
1060
 
int Field_tiny::store(double nr)
1061
 
{
1062
 
  int error= 0;
1063
 
  nr=rint(nr);
1064
 
 
1065
 
  {
1066
 
    if (nr < -128.0)
1067
 
    {
1068
 
      *ptr= (char) -128;
1069
 
      set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
1070
 
      error= 1;
1071
 
    }
1072
 
    else if (nr > 127.0)
1073
 
    {
1074
 
      *ptr=127;
1075
 
      set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
1076
 
      error= 1;
1077
 
    }
1078
 
    else
1079
 
      *ptr=(char) (int) nr;
1080
 
  }
1081
 
  return error;
1082
 
}
1083
 
 
1084
 
 
1085
 
int Field_tiny::store(int64_t nr, bool unsigned_val)
1086
 
{
1087
 
  int error= 0;
1088
 
 
1089
 
  {
1090
 
    if (nr < 0 && unsigned_val)
1091
 
      nr= 256;                                    // Generate overflow
1092
 
    if (nr < -128)
1093
 
    {
1094
 
      *ptr= (char) -128;
1095
 
      set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
1096
 
      error= 1;
1097
 
    }
1098
 
    else if (nr > 127)
1099
 
    {
1100
 
      *ptr=127;
1101
 
      set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_OUT_OF_RANGE, 1);
1102
 
      error= 1;
1103
 
    }
1104
 
    else
1105
 
      *ptr=(char) nr;
1106
 
  }
1107
 
  return error;
1108
 
}
1109
 
 
1110
 
 
1111
 
double Field_tiny::val_real(void)
1112
 
{
1113
 
  int tmp= (int) ((signed char*) ptr)[0];
1114
 
  return (double) tmp;
1115
 
}
1116
 
 
1117
 
 
1118
 
int64_t Field_tiny::val_int(void)
1119
 
{
1120
 
  int tmp= (int) ((signed char*) ptr)[0];
1121
 
  return (int64_t) tmp;
1122
 
}
1123
 
 
1124
 
 
1125
 
String *Field_tiny::val_str(String *val_buffer,
1126
 
                            String *val_ptr __attribute__((unused)))
1127
 
{
1128
 
  const CHARSET_INFO * const cs= &my_charset_bin;
1129
 
  uint32_t length;
1130
 
  uint32_t mlength=cmax(field_length+1,5*cs->mbmaxlen);
1131
 
  val_buffer->alloc(mlength);
1132
 
  char *to=(char*) val_buffer->ptr();
1133
 
 
1134
 
  length= (uint32_t) cs->cset->long10_to_str(cs,to,mlength,-10,
1135
 
                                             (long) *((signed char*) ptr));
1136
 
 
1137
 
  val_buffer->length(length);
1138
 
 
1139
 
  return val_buffer;
1140
 
}
1141
 
 
1142
 
bool Field_tiny::send_binary(Protocol *protocol)
1143
 
{
1144
 
  return protocol->store_tiny((int64_t) (int8_t) ptr[0]);
1145
 
}
1146
 
 
1147
 
int Field_tiny::cmp(const unsigned char *a_ptr, const unsigned char *b_ptr)
1148
 
{
1149
 
  signed char a,b;
1150
 
  a=(signed char) a_ptr[0]; b= (signed char) b_ptr[0];
1151
 
 
1152
 
  return (a < b) ? -1 : (a > b) ? 1 : 0;
1153
 
}
1154
 
 
1155
 
void Field_tiny::sort_string(unsigned char *to,uint32_t length __attribute__((unused)))
1156
 
{
1157
 
  to[0] = (char) (ptr[0] ^ (unsigned char) 128);        /* Revers signbit */
1158
 
}
1159
 
 
1160
 
void Field_tiny::sql_type(String &res) const
1161
 
{
1162
 
  const CHARSET_INFO * const cs=res.charset();
1163
 
  res.length(cs->cset->snprintf(cs,(char*) res.ptr(),res.alloced_length(),
1164
 
                          "tinyint(%d)",(int) field_length));
1165
 
}
1166
 
 
1167
1045
/*
1168
1046
  Report "not well formed" or "cannot convert" error
1169
1047
  after storing a character string info a field.
1766
1644
                            false,
1767
1645
                            f_is_dec(pack_flag)== 0);
1768
1646
  case DRIZZLE_TYPE_TINY:
1769
 
    return new Field_tiny(ptr,field_length,null_pos,null_bit,
1770
 
                          unireg_check, field_name,
1771
 
                          false,
1772
 
                          f_is_dec(pack_flag) == 0);
 
1647
    assert(0);
1773
1648
  case DRIZZLE_TYPE_LONG:
1774
1649
    return new Field_long(ptr,field_length,null_pos,null_bit,
1775
1650
                           unireg_check, field_name,