From: kevin.lewis Date: November 30 2010 4:06pm Subject: bzr commit into mysql-5.5-innodb branch (kevin.lewis:3243) List-Archive: http://lists.mysql.com/commits/125522 Message-Id: <20101130160619.A00197FD69C@kevin-lewis-macbook.local> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0190509467==" --===============0190509467== 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.5-innodb/ based on revid:sunny.bains@stripped 3243 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/innobase/handler/ha_innodb.cc === modified file 'storage/innobase/handler/ha_innodb.cc' --- a/storage/innobase/handler/ha_innodb.cc revid:sunny.bains@stripped +++ b/storage/innobase/handler/ha_innodb.cc revid:kevin.lewis@stripped @@ -6498,10 +6498,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: @@ -6516,12 +6517,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: @@ -6539,7 +6566,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); @@ -6548,23 +6575,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); @@ -6577,7 +6587,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( @@ -6587,72 +6613,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; } @@ -6703,7 +6700,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"); @@ -6821,20 +6818,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 @@ -6851,7 +6847,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. */ @@ -6866,7 +6862,7 @@ ha_innobase::create( } } - switch (row_type) { + switch (row_format) { case ROW_TYPE_REDUNDANT: break; case ROW_TYPE_COMPRESSED: @@ -6877,25 +6873,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, --===============0190509467== 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.5-innodb/ # testament_sha1: e8dc3032fdb8cd80e3b0568a56949e3fe90230b6 # timestamp: 2010-11-30 10:06:19 -0600 # base_revision_id: sunny.bains@stripped\ # 52jzzp06vpp49ny2 # # Begin bundle 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 oAh4xaLjaKnIr+9VoO+9H/i7kinChIOwwSSg --===============0190509467==--