MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / create_length_to_internal_length

Method create_length_to_internal_length

sql/sql_table.cc:1176–1221  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1174*/
1175
1176void 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/*

Callers 1

sp_prepare_create_fieldFunction · 0.80

Calls 3

calc_pack_lengthFunction · 0.85

Tested by

no test coverage detected