From: kevin.lewis Date: November 30 2010 4:04pm Subject: bzr commit into mysql-5.1-innodb branch (kevin.lewis:3663) List-Archive: http://lists.mysql.com/commits/125521 Message-Id: <20101130160408.6EBDE7FD66B@kevin-lewis-macbook.local> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0253404908==" --===============0253404908== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/kevinlewis/Work/Mysql/Bug56628.push/mysql-5.1-innodb/ based on revid:vasil.dimov@stripped 3663 kevin.lewis@stripped 2010-11-30 RB://518 approved by Jimmy Yang and Sunny bains Code cleanup after changes for Bug 56628. The general approach for InnoDB is to make a reference to each enum value whenever it is used in a switch statement. In addition, no default case should be used for switch statements on enum types. This assures that if there is ever any change in the enum values, the switch will need to change to reflect it since a compiler warning will occur. In this case, the enum row_type is declared in handler.h and could be changed for another storage engine. If so, a warning will occur in the InnoDB build. Other changes; * This patch uses 2 macros to help consolidate warning messages that need to occur twice in the single switch for row_format. * Using row_format as the variable name to distinguish it from the enum type. * Function declaration format correction. modified: storage/innodb_plugin/handler/ha_innodb.cc === modified file 'storage/innodb_plugin/handler/ha_innodb.cc' --- a/storage/innodb_plugin/handler/ha_innodb.cc revid:vasil.dimov@stripped +++ b/storage/innodb_plugin/handler/ha_innodb.cc revid:kevin.lewis@stripped @@ -6293,10 +6293,11 @@ create_clustered_index_when_no_primary( /*****************************************************************//** Return a display name for the row format @return row format name */ - -const char *get_row_format_name( -/*============================*/ -enum row_type row_format) /*!< in: Row Format */ +UNIV_INTERN +const char* +get_row_format_name( +/*================*/ + enum row_type row_format) /*!< in: Row Format */ { switch (row_format) { case ROW_TYPE_COMPACT: @@ -6311,12 +6312,38 @@ enum row_type row_format) /*!< in: Row return("DEFAULT"); case ROW_TYPE_FIXED: return("FIXED"); - default: + case ROW_TYPE_PAGE: + case ROW_TYPE_NOT_USED: break; } return("NOT USED"); } +/** If file-per-table is missing, issue warning and set ret false */ +#define CHECK_ERROR_ROW_TYPE_NEEDS_FILE_PER_TABLE \ + if (!srv_file_per_table) { \ + push_warning_printf( \ + thd, MYSQL_ERROR::WARN_LEVEL_WARN, \ + ER_ILLEGAL_HA_CREATE_OPTION, \ + "InnoDB: ROW_FORMAT=%s requires" \ + " innodb_file_per_table.", \ + get_row_format_name(row_format)); \ + ret = FALSE; \ + } + +/** If file-format is Antelope, issue warning and set ret false */ +#define CHECK_ERROR_ROW_TYPE_NEEDS_GT_ANTELOPE \ + if (srv_file_format < DICT_TF_FORMAT_ZIP) { \ + push_warning_printf( \ + thd, MYSQL_ERROR::WARN_LEVEL_WARN, \ + ER_ILLEGAL_HA_CREATE_OPTION, \ + "InnoDB: ROW_FORMAT=%s requires" \ + " innodb_file_format > Antelope.", \ + get_row_format_name(row_format)); \ + ret = FALSE; \ + } + + /*****************************************************************//** Validates the create options. We may build on this function in future. For now, it checks two specifiers: @@ -6334,7 +6361,7 @@ create_options_are_valid( { ibool kbs_specified = FALSE; ibool ret = TRUE; - enum row_type row_type = form->s->row_type; + enum row_type row_format = form->s->row_type; ut_ad(thd != NULL); @@ -6343,23 +6370,6 @@ create_options_are_valid( return(TRUE); } - /* Check for a valid Innodb ROW_FORMAT specifier. For example, - ROW_TYPE_FIXED can be sent to Innodb */ - switch (row_type) { - case ROW_TYPE_COMPACT: - case ROW_TYPE_COMPRESSED: - case ROW_TYPE_DYNAMIC: - case ROW_TYPE_REDUNDANT: - case ROW_TYPE_DEFAULT: - break; - default: - push_warning( - thd, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_ILLEGAL_HA_CREATE_OPTION, - "InnoDB: invalid ROW_FORMAT specifier."); - ret = FALSE; - } - ut_ad(form != NULL); ut_ad(create_info != NULL); @@ -6372,7 +6382,23 @@ create_options_are_valid( case 4: case 8: case 16: - /* Valid value. */ + /* Valid KEY_BLOCK_SIZE, check its dependencies. */ + if (!srv_file_per_table) { + push_warning( + thd, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_ILLEGAL_HA_CREATE_OPTION, + "InnoDB: KEY_BLOCK_SIZE requires" + " innodb_file_per_table."); + ret = FALSE; + } + if (srv_file_format < DICT_TF_FORMAT_ZIP) { + push_warning( + thd, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_ILLEGAL_HA_CREATE_OPTION, + "InnoDB: KEY_BLOCK_SIZE requires" + " innodb_file_format > Antelope."); + ret = FALSE; + } break; default: push_warning_printf( @@ -6382,72 +6408,43 @@ create_options_are_valid( " Valid values are [1, 2, 4, 8, 16]", create_info->key_block_size); ret = FALSE; + break; } } - /* If KEY_BLOCK_SIZE was specified, check for its - dependencies. */ - if (kbs_specified && !srv_file_per_table) { - push_warning( - thd, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_ILLEGAL_HA_CREATE_OPTION, - "InnoDB: KEY_BLOCK_SIZE" - " requires innodb_file_per_table."); - ret = FALSE; - } - - if (kbs_specified && srv_file_format < DICT_TF_FORMAT_ZIP) { - push_warning( - thd, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_ILLEGAL_HA_CREATE_OPTION, - "InnoDB: KEY_BLOCK_SIZE requires" - " innodb_file_format > Antelope."); - ret = FALSE; - } - - switch (row_type) { + /* Check for a valid Innodb ROW_FORMAT specifier and + other incompatibilities. */ + switch (row_format) { case ROW_TYPE_COMPRESSED: - case ROW_TYPE_DYNAMIC: - /* These two ROW_FORMATs require srv_file_per_table - and srv_file_format > Antelope */ - if (!srv_file_per_table) { - push_warning_printf( - thd, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_ILLEGAL_HA_CREATE_OPTION, - "InnoDB: ROW_FORMAT=%s" - " requires innodb_file_per_table.", - get_row_format_name(row_type)); - ret = FALSE; - } - - if (srv_file_format < DICT_TF_FORMAT_ZIP) { - push_warning_printf( - thd, MYSQL_ERROR::WARN_LEVEL_WARN, - ER_ILLEGAL_HA_CREATE_OPTION, - "InnoDB: ROW_FORMAT=%s requires" - " innodb_file_format > Antelope.", - get_row_format_name(row_type)); - ret = FALSE; - } - default: + CHECK_ERROR_ROW_TYPE_NEEDS_FILE_PER_TABLE; + CHECK_ERROR_ROW_TYPE_NEEDS_GT_ANTELOPE; break; - } - - switch (row_type) { - case ROW_TYPE_REDUNDANT: - case ROW_TYPE_COMPACT: case ROW_TYPE_DYNAMIC: - /* KEY_BLOCK_SIZE is only allowed with Compressed or Default */ + CHECK_ERROR_ROW_TYPE_NEEDS_FILE_PER_TABLE; + CHECK_ERROR_ROW_TYPE_NEEDS_GT_ANTELOPE; + /* fall through since dynamic also shuns KBS */ + case ROW_TYPE_COMPACT: + case ROW_TYPE_REDUNDANT: if (kbs_specified) { push_warning_printf( thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_ILLEGAL_HA_CREATE_OPTION, "InnoDB: cannot specify ROW_FORMAT = %s" " with KEY_BLOCK_SIZE.", - get_row_format_name(row_type)); - ret = FALSE; + get_row_format_name(row_format)); + ret = FALSE; } - default: + break; + case ROW_TYPE_DEFAULT: + break; + case ROW_TYPE_FIXED: + case ROW_TYPE_PAGE: + case ROW_TYPE_NOT_USED: + push_warning( + thd, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_ILLEGAL_HA_CREATE_OPTION, \ + "InnoDB: invalid ROW_FORMAT specifier."); + ret = FALSE; break; } @@ -6498,7 +6495,7 @@ ha_innobase::create( const ulint file_format = srv_file_format; const char* stmt; size_t stmt_len; - enum row_type row_type; + enum row_type row_format; DBUG_ENTER("ha_innobase::create"); @@ -6598,8 +6595,8 @@ ha_innobase::create( push_warning( thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_ILLEGAL_HA_CREATE_OPTION, - "InnoDB: KEY_BLOCK_SIZE" - " requires innodb_file_per_table."); + "InnoDB: KEY_BLOCK_SIZE requires" + " innodb_file_per_table."); flags = 0; } @@ -6616,20 +6613,19 @@ ha_innobase::create( push_warning_printf( thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_ILLEGAL_HA_CREATE_OPTION, - "InnoDB: ignoring" - " KEY_BLOCK_SIZE=%lu.", + "InnoDB: ignoring KEY_BLOCK_SIZE=%lu.", create_info->key_block_size); } } - row_type = form->s->row_type; + row_format = form->s->row_type; if (flags) { /* if ROW_FORMAT is set to default, automatically change it to COMPRESSED.*/ - if (row_type == ROW_TYPE_DEFAULT) { - row_type = ROW_TYPE_COMPRESSED; - } else if (row_type != ROW_TYPE_COMPRESSED) { + if (row_format == ROW_TYPE_DEFAULT) { + row_format = ROW_TYPE_COMPRESSED; + } else if (row_format != ROW_TYPE_COMPRESSED) { /* ROW_FORMAT other than COMPRESSED ignores KEY_BLOCK_SIZE. It does not make sense to reject conflicting @@ -6646,7 +6642,7 @@ ha_innobase::create( } } else { /* flags == 0 means no KEY_BLOCK_SIZE.*/ - if (row_type == ROW_TYPE_COMPRESSED) { + if (row_format == ROW_TYPE_COMPRESSED) { /* ROW_FORMAT=COMPRESSED without KEY_BLOCK_SIZE implies half the maximum KEY_BLOCK_SIZE. */ @@ -6661,7 +6657,7 @@ ha_innobase::create( } } - switch (row_type) { + switch (row_format) { case ROW_TYPE_REDUNDANT: break; case ROW_TYPE_COMPRESSED: @@ -6672,25 +6668,25 @@ ha_innobase::create( ER_ILLEGAL_HA_CREATE_OPTION, "InnoDB: ROW_FORMAT=%s requires" " innodb_file_per_table.", - get_row_format_name(row_type)); + get_row_format_name(row_format)); } else if (file_format < DICT_TF_FORMAT_ZIP) { push_warning_printf( thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_ILLEGAL_HA_CREATE_OPTION, "InnoDB: ROW_FORMAT=%s requires" " innodb_file_format > Antelope.", - get_row_format_name(row_type)); + get_row_format_name(row_format)); } else { flags |= DICT_TF_COMPACT - | (DICT_TF_FORMAT_ZIP - << DICT_TF_FORMAT_SHIFT); + | (DICT_TF_FORMAT_ZIP + << DICT_TF_FORMAT_SHIFT); break; } /* fall through */ case ROW_TYPE_NOT_USED: case ROW_TYPE_FIXED: - default: + case ROW_TYPE_PAGE: push_warning( thd, MYSQL_ERROR::WARN_LEVEL_WARN, ER_ILLEGAL_HA_CREATE_OPTION, --===============0253404908== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/kevin.lewis@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: kevin.lewis@stripped # target_branch: file:///Users/kevinlewis/Work/Mysql/Bug56628.push\ # /mysql-5.1-innodb/ # testament_sha1: 048a336be5fada03858168a4e3e2b62c0ff82cfb # timestamp: 2010-11-30 10:04:08 -0600 # base_revision_id: vasil.dimov@stripped\ # jxk28b7gnkb3cihl # # Begin bundle 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 --===============0253404908==--