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

Function prepare_create_field

sql/sql_table.cc:1242–1384  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1240*/
1241
1242int prepare_create_field(Create_field *sql_field,
1243 uint *blob_columns,
1244 longlong table_flags)
1245{
1246 unsigned int dup_val_count;
1247 DBUG_ENTER("prepare_field");
1248
1249 /*
1250 This code came from mysql_prepare_create_table.
1251 Indent preserved to make patching easier
1252 */
1253 DBUG_ASSERT(sql_field->charset);
1254
1255 switch (sql_field->sql_type) {
1256 case MYSQL_TYPE_BLOB:
1257 case MYSQL_TYPE_MEDIUM_BLOB:
1258 case MYSQL_TYPE_TINY_BLOB:
1259 case MYSQL_TYPE_LONG_BLOB:
1260 sql_field->pack_flag=FIELDFLAG_BLOB |
1261 pack_length_to_packflag(sql_field->pack_length -
1262 portable_sizeof_char_ptr);
1263 if (sql_field->charset->state & MY_CS_BINSORT)
1264 sql_field->pack_flag|=FIELDFLAG_BINARY;
1265 sql_field->length=8; // Unireg field length
1266 sql_field->unireg_check=BLOB_FIELD;
1267 (*blob_columns)++;
1268 break;
1269 case MYSQL_TYPE_GEOMETRY:
1270#ifdef HAVE_SPATIAL
1271 if (!(table_flags & HA_CAN_GEOMETRY))
1272 {
1273 my_printf_error(ER_CHECK_NOT_IMPLEMENTED, ER(ER_CHECK_NOT_IMPLEMENTED),
1274 MYF(0), "GEOMETRY");
1275 DBUG_RETURN(1);
1276 }
1277 sql_field->pack_flag=FIELDFLAG_GEOM |
1278 pack_length_to_packflag(sql_field->pack_length -
1279 portable_sizeof_char_ptr);
1280 if (sql_field->charset->state & MY_CS_BINSORT)
1281 sql_field->pack_flag|=FIELDFLAG_BINARY;
1282 sql_field->length=8; // Unireg field length
1283 sql_field->unireg_check=BLOB_FIELD;
1284 (*blob_columns)++;
1285 break;
1286#else
1287 my_printf_error(ER_FEATURE_DISABLED,ER(ER_FEATURE_DISABLED), MYF(0),
1288 sym_group_geom.name, sym_group_geom.needed_define);
1289 DBUG_RETURN(1);
1290#endif /*HAVE_SPATIAL*/
1291 case MYSQL_TYPE_VARCHAR:
1292#ifndef QQ_ALL_HANDLERS_SUPPORT_VARCHAR
1293 if (table_flags & HA_NO_VARCHAR)
1294 {
1295 /* convert VARCHAR to CHAR because handler is not yet up to date */
1296 sql_field->sql_type= MYSQL_TYPE_VAR_STRING;
1297 sql_field->pack_length= calc_pack_length(sql_field->sql_type,
1298 (uint) sql_field->length);
1299 if ((sql_field->length / sql_field->charset->mbmaxlen) >

Callers 1

fill_field_definitionFunction · 0.85

Calls 5

pack_length_to_packflagFunction · 0.85
my_printf_errorFunction · 0.85
calc_pack_lengthFunction · 0.85
my_errorFunction · 0.85

Tested by

no test coverage detected