| 22962 | |
| 22963 | |
| 22964 | bool 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 | |
| 23010 | void Create_tmp_table::cleanup_on_failure(THD *thd, TABLE *table) |
no test coverage detected