diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/handler.cc | 3 | ||||
-rw-r--r-- | sql/mysqld.cc | 8 | ||||
-rw-r--r-- | sql/sql_class.h | 2 | ||||
-rw-r--r-- | sql/sql_show.cc | 6 | ||||
-rw-r--r-- | sql/sql_table.cc | 6 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 3 | ||||
-rw-r--r-- | sql/sys_vars.cc | 23 |
7 files changed, 42 insertions, 9 deletions
diff --git a/sql/handler.cc b/sql/handler.cc index 9c4c6287950..aea8f38d71a 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -5783,7 +5783,8 @@ int handler::calculate_checksum() { Field *f= table->field[i]; - if (! thd->variables.old_mode && f->is_real_null(0)) + if (! (thd->variables.old_behavior & OLD_MODE_CHECKSUM_SLOW_NULLS) && + f->is_real_null(0)) { flush_checksum(&row_crc, &checksum_start, &checksum_length); continue; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index e7e5af8a2c8..f6c6c1effd7 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -8471,6 +8471,14 @@ static int get_options(int *argc_ptr, char ***argv_ptr) between options, setting of multiple variables, etc. Do them here. */ + + if (global_system_variables.old_mode) + { + global_system_variables.old_behavior|= (OLD_MODE_NO_PROGRESS_INFO | + OLD_MODE_INDEX_HINT_MASK_JOIN | + OLD_MODE_CHECKSUM_SLOW_NULLS); + } + if (global_system_variables.net_buffer_length > global_system_variables.max_allowed_packet) { diff --git a/sql/sql_class.h b/sql/sql_class.h index df9d89b5aff..ab3f3b3af4b 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -191,6 +191,8 @@ enum enum_binlog_row_image { #define OLD_MODE_NO_PROGRESS_INFO (1 << 1) #define OLD_MODE_ZERO_DATE_TIME_CAST (1 << 2) #define OLD_MODE_UTF8_IS_UTF8MB3 (1 << 3) +#define OLD_MODE_INDEX_HINT_MASK_JOIN (1 << 4) +#define OLD_MODE_CHECKSUM_SLOW_NULLS (1 << 5) extern char internal_table_name[2]; extern char empty_c_string[1]; diff --git a/sql/sql_show.cc b/sql/sql_show.cc index d01f84fe7d1..a4e7c69d089 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -2918,8 +2918,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) Item_empty_string(thd, "Info", arg.max_query_length), mem_root); field->set_maybe_null();; - if (!thd->variables.old_mode && - !(thd->variables.old_behavior & OLD_MODE_NO_PROGRESS_INFO)) + if (!(thd->variables.old_behavior & OLD_MODE_NO_PROGRESS_INFO)) { field_list.push_back(field= new (mem_root) Item_float(thd, "Progress", 0.0, 3, 7), @@ -2961,8 +2960,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) thd_info->query_string.charset()); else protocol->store_null(); - if (!thd->variables.old_mode && - !(thd->variables.old_behavior & OLD_MODE_NO_PROGRESS_INFO)) + if (!(thd->variables.old_behavior & OLD_MODE_NO_PROGRESS_INFO)) protocol->store_double(thd_info->progress, 3); if (protocol->write()) break; /* purecov: inspected */ diff --git a/sql/sql_table.cc b/sql/sql_table.cc index a9ad8b7720d..331dea5acd5 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -11487,8 +11487,10 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables, { /* Call ->checksum() if the table checksum matches 'old_mode' settings */ if (!(check_opt->flags & T_EXTEND) && - (((t->file->ha_table_flags() & HA_HAS_OLD_CHECKSUM) && thd->variables.old_mode) || - ((t->file->ha_table_flags() & HA_HAS_NEW_CHECKSUM) && !thd->variables.old_mode))) + (((t->file->ha_table_flags() & HA_HAS_OLD_CHECKSUM) && + (thd->variables.old_behavior & OLD_MODE_CHECKSUM_SLOW_NULLS)) || + ((t->file->ha_table_flags() & HA_HAS_NEW_CHECKSUM) && + !(thd->variables.old_behavior & OLD_MODE_CHECKSUM_SLOW_NULLS)))) { if (t->file->info(HA_STATUS_VARIABLE) || t->file->stats.checksum_null) protocol->store_null(); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 8ebefbb3d82..d605c4e89b4 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -11769,7 +11769,8 @@ opt_outer: index_hint_clause: /* empty */ { - $$= thd->variables.old_mode ? INDEX_HINT_MASK_JOIN : INDEX_HINT_MASK_ALL; + $$= (thd->variables.old_behavior & OLD_MODE_INDEX_HINT_MASK_JOIN) ? + INDEX_HINT_MASK_JOIN : INDEX_HINT_MASK_ALL; } | FOR_SYM JOIN_SYM { $$= INDEX_HINT_MASK_JOIN; } | FOR_SYM ORDER_SYM BY { $$= INDEX_HINT_MASK_ORDER; } diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 7127cbc00f6..a7f27930123 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -2648,9 +2648,28 @@ static Sys_var_ulong Sys_net_retry_count( BLOCK_SIZE(1), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(fix_net_retry_count)); +static bool set_old_mode (sys_var *self, THD *thd, enum_var_type type) +{ + if (thd->variables.old_mode) + { + thd->variables.old_behavior|= (OLD_MODE_NO_PROGRESS_INFO | + OLD_MODE_INDEX_HINT_MASK_JOIN | + OLD_MODE_CHECKSUM_SLOW_NULLS); + } + else + { + thd->variables.old_behavior&= ~(OLD_MODE_NO_PROGRESS_INFO| + OLD_MODE_INDEX_HINT_MASK_JOIN | + OLD_MODE_CHECKSUM_SLOW_NULLS); + } + + return false; +} + static Sys_var_mybool Sys_old_mode( "old", "Use compatible behavior from previous MariaDB version. See also --old-mode", - SESSION_VAR(old_mode), CMD_LINE(OPT_ARG), DEFAULT(FALSE)); + SESSION_VAR(old_mode), CMD_LINE(OPT_ARG), DEFAULT(FALSE), 0, NOT_IN_BINLOG, ON_CHECK(0), + ON_UPDATE(set_old_mode), DEPRECATED("'@@old_mode'")); static const char *alter_algorithm_modes[]= {"DEFAULT", "COPY", "INPLACE", "NOCOPY", "INSTANT", NULL}; @@ -3751,6 +3770,8 @@ static const char *old_mode_names[]= "NO_PROGRESS_INFO", "ZERO_DATE_TIME_CAST", "UTF8_IS_UTF8MB3", + "INDEX_HINT_MASK_JOIN", + "CHECKSUM_SLOW_NULLS", 0 }; |