MCPcopy Create free account
hub / github.com/MariaDB/server / add_schema_fields

Method add_schema_fields

sql/sql_select.cc:22964–23007  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

22962
22963
22964bool Create_tmp_table::add_schema_fields(THD *thd, TABLE *table,
22965 TMP_TABLE_PARAM *param,
22966 const ST_SCHEMA_TABLE &schema_table)
22967{
22968 DBUG_ENTER("Create_tmp_table::add_schema_fields");
22969 DBUG_ASSERT(table);
22970 DBUG_ASSERT(table->field);
22971 DBUG_ASSERT(table->s->blob_field);
22972 DBUG_ASSERT(table->s->reclength == 0);
22973 DBUG_ASSERT(table->s->fields == 0);
22974 DBUG_ASSERT(table->s->blob_fields == 0);
22975
22976 TABLE_SHARE *share= table->s;
22977 ST_FIELD_INFO *defs= schema_table.fields_info;
22978 uint fieldnr;
22979 MEM_ROOT *mem_root_save= thd->mem_root;
22980 thd->mem_root= &table->mem_root;
22981
22982 for (fieldnr= 0; !defs[fieldnr].end_marker(); fieldnr++)
22983 {
22984 const ST_FIELD_INFO &def= defs[fieldnr];
22985 Record_addr addr(def.nullable());
22986 const Type_handler *h= def.type_handler();
22987 Field *field= h->make_schema_field(&table->mem_root, table, addr, def);
22988 if (!field)
22989 {
22990 thd->mem_root= mem_root_save;
22991 DBUG_RETURN(true); // EOM
22992 }
22993 field->init(table);
22994 field->flags|= NO_DEFAULT_VALUE_FLAG;
22995 add_field(table, field, fieldnr, param->force_not_null_cols);
22996 }
22997
22998 share->fields= fieldnr;
22999 share->blob_fields= m_blob_count;
23000 table->field[fieldnr]= 0; // End marker
23001 share->blob_field[m_blob_count]= 0; // End marker
23002 param->func_count= 0;
23003 share->column_bitmap_size= bitmap_buffer_size(share->fields);
23004
23005 thd->mem_root= mem_root_save;
23006 DBUG_RETURN(false);
23007}
23008
23009
23010void Create_tmp_table::cleanup_on_failure(THD *thd, TABLE *table)

Callers 1

Calls 6

add_fieldFunction · 0.85
end_markerMethod · 0.80
nullableMethod · 0.80
type_handlerMethod · 0.45
make_schema_fieldMethod · 0.45
initMethod · 0.45

Tested by

no test coverage detected