| 1174 | */ |
| 1175 | |
| 1176 | void Create_field::create_length_to_internal_length(void) |
| 1177 | { |
| 1178 | switch (sql_type) { |
| 1179 | case MYSQL_TYPE_TINY_BLOB: |
| 1180 | case MYSQL_TYPE_MEDIUM_BLOB: |
| 1181 | case MYSQL_TYPE_LONG_BLOB: |
| 1182 | case MYSQL_TYPE_BLOB: |
| 1183 | case MYSQL_TYPE_GEOMETRY: |
| 1184 | case MYSQL_TYPE_VAR_STRING: |
| 1185 | case MYSQL_TYPE_STRING: |
| 1186 | case MYSQL_TYPE_VARCHAR: |
| 1187 | length*= charset->mbmaxlen; |
| 1188 | key_length= length; |
| 1189 | pack_length= calc_pack_length(sql_type, length); |
| 1190 | break; |
| 1191 | case MYSQL_TYPE_ENUM: |
| 1192 | case MYSQL_TYPE_SET: |
| 1193 | /* Pack_length already calculated in sql_parse.cc */ |
| 1194 | length*= charset->mbmaxlen; |
| 1195 | key_length= pack_length; |
| 1196 | break; |
| 1197 | case MYSQL_TYPE_BIT: |
| 1198 | if (f_bit_as_char(pack_flag)) |
| 1199 | { |
| 1200 | key_length= pack_length= ((length + 7) & ~7) / 8; |
| 1201 | } |
| 1202 | else |
| 1203 | { |
| 1204 | pack_length= length / 8; |
| 1205 | /* We need one extra byte to store the bits we save among the null bits */ |
| 1206 | key_length= pack_length + MY_TEST(length & 7); |
| 1207 | } |
| 1208 | break; |
| 1209 | case MYSQL_TYPE_NEWDECIMAL: |
| 1210 | key_length= pack_length= |
| 1211 | my_decimal_get_binary_size(my_decimal_length_to_precision(length, |
| 1212 | decimals, |
| 1213 | flags & |
| 1214 | UNSIGNED_FLAG), |
| 1215 | decimals); |
| 1216 | break; |
| 1217 | default: |
| 1218 | key_length= pack_length= calc_pack_length(sql_type, length); |
| 1219 | break; |
| 1220 | } |
| 1221 | } |
| 1222 | |
| 1223 | |
| 1224 | /* |
no test coverage detected