From: Jon Olav Hauglid Date: November 29 2010 4:28pm Subject: bzr commit into mysql-trunk-bugfixing branch (jon.hauglid:3393) Bug#57035 List-Archive: http://lists.mysql.com/commits/125388 X-Bug: 57035 Message-Id: <201011291628.oAT1eWwZ024773@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6516789048921442140==" --===============6516789048921442140== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-trunk-bugfixing-bug57035/ based on revid:georgi.kodinov@stripped 3393 Jon Olav Hauglid 2010-11-29 Bug #57035 'ulonglong sql_mode' stored into ulong, is risky and causes compiler warning In 5.5 THD::variables::sql_mode was changed from ulong to ulonglong. The problem was that several variables used to store sql_mode were still declared as ulong. This patch updates these declarations to sql_mode_t which is typedef'ed to ulonglong. The patch also adds a test case designed to break once someone adds a new SQL mode. This is done to serve as an indication that current tests which use "SET @@sql_mode= cast(pow(2,32)-1" to activate all SQL modes will then have to be updated. modified: mysql-test/r/variables.result mysql-test/t/variables.test sql/event_data_objects.cc sql/event_data_objects.h sql/event_db_repository.cc sql/ha_partition.cc sql/item.cc sql/item_cmpfunc.cc sql/item_timefunc.h sql/log_event.cc sql/log_event.h sql/opt_range.cc sql/partition_info.cc sql/set_var.h sql/sp.cc sql/sp.h sql/sp_head.cc sql/sp_head.h sql/sql_acl.cc sql/sql_cache.cc sql/sql_cache.h sql/sql_class.h sql/sql_insert.cc sql/sql_select.h sql/sql_show.cc sql/sql_table.cc sql/sql_trigger.cc sql/sql_trigger.h sql/sql_view.cc sql/sys_vars.cc === modified file 'mysql-test/r/variables.result' --- a/mysql-test/r/variables.result 2010-11-25 04:41:58 +0000 +++ b/mysql-test/r/variables.result 2010-11-29 16:27:58 +0000 @@ -1722,3 +1722,9 @@ set @@session.autocommit=t1_min(), @@ses drop table t1; drop function t1_min; drop function t1_max; +# +# Bug#57035 'ulonglong sql_mode' stored into ulong, is risky and causes +# compiler warning +# +SET @@sql_mode= 4294967296; +ERROR 42000: Variable 'sql_mode' can't be set to the value of '4294967296' === modified file 'mysql-test/t/variables.test' --- a/mysql-test/t/variables.test 2010-11-25 04:41:58 +0000 +++ b/mysql-test/t/variables.test 2010-11-29 16:27:58 +0000 @@ -1464,3 +1464,23 @@ drop function t1_max; ########################################################################### + + +--echo # +--echo # Bug#57035 'ulonglong sql_mode' stored into ulong, is risky and causes +--echo # compiler warning +--echo # + +# Several tests currently use "@@sql_mode= cast(pow(2,32)-1" +# to activate all SQL modes. This will stop working once +# someone adds a new flag. The test below is designed to break +# once this happens to indicate that other tests will have to +# be updated. +# +# The test does this by trying to set sql_mode to the next +# currently unused flag value and check that this currently fails. +# Once a new flag is added, this value will become valid and +# the statement below will succeed. + +--error ER_WRONG_VALUE_FOR_VAR +SET @@sql_mode= 4294967296; === modified file 'sql/event_data_objects.cc' --- a/sql/event_data_objects.cc 2010-11-18 16:34:56 +0000 +++ b/sql/event_data_objects.cc 2010-11-29 16:27:58 +0000 @@ -430,7 +430,7 @@ Event_job_data::load_from_row(THD *thd, definer_host.str= strmake_root(&mem_root, ptr + 1, len); definer_host.length= len; - sql_mode= (ulong) table->field[ET_FIELD_SQL_MODE]->val_int(); + sql_mode= (sql_mode_t) table->field[ET_FIELD_SQL_MODE]->val_int(); DBUG_RETURN(FALSE); } @@ -636,7 +636,7 @@ Event_timed::load_from_row(THD *thd, TAB else comment.length= 0; - sql_mode= (ulong) table->field[ET_FIELD_SQL_MODE]->val_int(); + sql_mode= (sql_mode_t) table->field[ET_FIELD_SQL_MODE]->val_int(); DBUG_RETURN(FALSE); } === modified file 'sql/event_data_objects.h' --- a/sql/event_data_objects.h 2010-11-18 16:34:56 +0000 +++ b/sql/event_data_objects.h 2010-11-29 16:27:58 +0000 @@ -132,7 +132,7 @@ public: ulonglong created; ulonglong modified; - ulong sql_mode; + sql_mode_t sql_mode; class Stored_program_creation_ctx *creation_ctx; LEX_STRING body_utf8; @@ -158,7 +158,7 @@ public: LEX_STRING definer_user; LEX_STRING definer_host; - ulong sql_mode; + sql_mode_t sql_mode; class Stored_program_creation_ctx *creation_ctx; === modified file 'sql/event_db_repository.cc' --- a/sql/event_db_repository.cc 2010-11-18 16:34:56 +0000 +++ b/sql/event_db_repository.cc 2010-11-29 16:27:58 +0000 @@ -199,7 +199,7 @@ mysql_event_fill_row(THD *thd, TABLE *table, Event_parse_data *et, sp_head *sp, - ulong sql_mode, + sql_mode_t sql_mode, my_bool is_update) { CHARSET_INFO *scs= system_charset_info; @@ -622,7 +622,7 @@ Event_db_repository::create_event(THD *t int ret= 1; TABLE *table= NULL; sp_head *sp= thd->lex->sphead; - ulong saved_mode= thd->variables.sql_mode; + sql_mode_t saved_mode= thd->variables.sql_mode; /* Take a savepoint to release only the lock on mysql.event table at the end but keep the global read lock and @@ -740,7 +740,7 @@ Event_db_repository::update_event(THD *t CHARSET_INFO *scs= system_charset_info; TABLE *table= NULL; sp_head *sp= thd->lex->sphead; - ulong saved_mode= thd->variables.sql_mode; + sql_mode_t saved_mode= thd->variables.sql_mode; /* Take a savepoint to release only the lock on mysql.event table at the end but keep the global read lock and @@ -1015,7 +1015,7 @@ Event_db_repository::load_named_event(TH LEX_STRING name, Event_basic *etn) { bool ret; - ulong saved_mode= thd->variables.sql_mode; + sql_mode_t saved_mode= thd->variables.sql_mode; Open_tables_backup open_tables_backup; TABLE_LIST event_table; === modified file 'sql/ha_partition.cc' --- a/sql/ha_partition.cc 2010-11-26 15:20:05 +0000 +++ b/sql/ha_partition.cc 2010-11-29 16:27:58 +0000 @@ -3095,7 +3095,7 @@ int ha_partition::write_row(uchar * buf) my_bitmap_map *old_map; THD *thd= ha_thd(); timestamp_auto_set_type saved_timestamp_type= table->timestamp_field_type; - ulong saved_sql_mode= thd->variables.sql_mode; + sql_mode_t saved_sql_mode= thd->variables.sql_mode; bool saved_auto_inc_field_not_null= table->auto_increment_field_not_null; #ifdef NOT_NEEDED uchar *rec0= m_rec0; === modified file 'sql/item.cc' --- a/sql/item.cc 2010-11-19 15:49:46 +0000 +++ b/sql/item.cc 2010-11-29 16:27:58 +0000 @@ -1068,7 +1068,7 @@ int Item::save_in_field_no_warnings(Fiel THD *thd= table->in_use; enum_check_fields tmp= thd->count_cuted_fields; my_bitmap_map *old_map= dbug_tmp_use_all_columns(table, table->write_set); - ulonglong sql_mode= thd->variables.sql_mode; + sql_mode_t sql_mode= thd->variables.sql_mode; thd->variables.sql_mode&= ~(MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE); thd->count_cuted_fields= CHECK_FIELD_IGNORE; res= save_in_field(field, no_conversions); === modified file 'sql/item_cmpfunc.cc' --- a/sql/item_cmpfunc.cc 2010-11-05 16:23:32 +0000 +++ b/sql/item_cmpfunc.cc 2010-11-29 16:27:58 +0000 @@ -406,7 +406,7 @@ static bool convert_constant_item(THD *t if (!(*item)->with_subselect && (*item)->const_item()) { TABLE *table= field->table; - ulonglong orig_sql_mode= thd->variables.sql_mode; + sql_mode_t orig_sql_mode= thd->variables.sql_mode; enum_check_fields orig_count_cuted_fields= thd->count_cuted_fields; my_bitmap_map *old_maps[2]; ulonglong UNINIT_VAR(orig_field_val); /* original field value if valid */ === modified file 'sql/item_timefunc.h' --- a/sql/item_timefunc.h 2010-10-31 23:37:14 +0000 +++ b/sql/item_timefunc.h 2010-11-29 16:27:58 +0000 @@ -1041,7 +1041,7 @@ class Item_func_str_to_date :public Item date_time_format_types cached_format_type; timestamp_type cached_timestamp_type; bool const_item; - ulonglong sql_mode; + sql_mode_t sql_mode; public: Item_func_str_to_date(Item *a, Item *b) :Item_str_func(a, b), const_item(false) === modified file 'sql/log_event.cc' --- a/sql/log_event.cc 2010-11-29 11:28:55 +0000 +++ b/sql/log_event.cc 2010-11-29 16:27:58 +0000 @@ -2498,7 +2498,7 @@ bool Query_log_event::write(IO_CACHE* fi if (sql_mode_inited) { *start++= Q_SQL_MODE_CODE; - int8store(start, (ulonglong)sql_mode); + int8store(start, sql_mode); start+= 8; } if (catalog_len) // i.e. this var is inited (false for 4.0 events) @@ -2827,7 +2827,7 @@ Query_log_event::Query_log_event(THD* th else cache_type= Log_event::EVENT_STMT_CACHE; DBUG_ASSERT(cache_type != Log_event::EVENT_INVALID_CACHE); - DBUG_PRINT("info",("Query_log_event has flags2: %lu sql_mode: %lu", + DBUG_PRINT("info",("Query_log_event has flags2: %lu sql_mode: %llu", (ulong) flags2, sql_mode)); } #endif /* MYSQL_CLIENT */ @@ -3042,7 +3042,7 @@ Query_log_event::Query_log_event(const c #endif CHECK_SPACE(pos, end, 8); sql_mode_inited= 1; - sql_mode= (ulong) uint8korr(pos); // QQ: Fix when sql_mode is ulonglong + sql_mode= uint8korr(pos); DBUG_PRINT("info",("In Query_log_event, read sql_mode: %s", llstr(sql_mode, buff))); pos+= 8; @@ -3515,8 +3515,8 @@ int Query_log_event::do_apply_event(Rela */ if (sql_mode_inited) thd->variables.sql_mode= - (ulong) ((thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE) | - (sql_mode & ~(ulong) MODE_NO_DIR_IN_CREATE)); + (sql_mode_t) ((thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE) | + (sql_mode & ~(ulonglong) MODE_NO_DIR_IN_CREATE)); if (charset_inited) { if (rli->cached_charset_compare(charset)) === modified file 'sql/log_event.h' --- a/sql/log_event.h 2010-11-16 12:14:06 +0000 +++ b/sql/log_event.h 2010-11-29 16:27:58 +0000 @@ -51,6 +51,7 @@ /* Forward declarations */ class String; +typedef ulonglong sql_mode_t; #define PREFIX_SQL_LOAD "SQL_LOAD-" @@ -695,7 +696,7 @@ typedef struct st_print_event_info bool flags2_inited; uint32 flags2; bool sql_mode_inited; - ulong sql_mode; /* must be same as THD.variables.sql_mode */ + sql_mode_t sql_mode; /* must be same as THD.variables.sql_mode */ ulong auto_increment_increment, auto_increment_offset; bool charset_inited; char charset[6]; // 3 variables, each of them storable in 2 bytes @@ -1740,7 +1741,7 @@ public: uint32 flags2; /* In connections sql_mode is 32 bits now but will be 64 bits soon */ - ulong sql_mode; + sql_mode_t sql_mode; ulong auto_increment_increment, auto_increment_offset; char charset[6]; uint time_zone_len; /* 0 means uninited */ === modified file 'sql/opt_range.cc' --- a/sql/opt_range.cc 2010-11-26 13:46:21 +0000 +++ b/sql/opt_range.cc 2010-11-29 16:27:58 +0000 @@ -5721,7 +5721,7 @@ get_mm_leaf(RANGE_OPT_PARAM *param, Item SEL_ARG *tree= 0; MEM_ROOT *alloc= param->mem_root; uchar *str; - ulonglong orig_sql_mode; + sql_mode_t orig_sql_mode; int err; DBUG_ENTER("get_mm_leaf"); === modified file 'sql/partition_info.cc' --- a/sql/partition_info.cc 2010-10-01 16:11:50 +0000 +++ b/sql/partition_info.cc 2010-11-29 16:27:58 +0000 @@ -2156,7 +2156,7 @@ bool partition_info::fix_column_value_fu { uchar *val_ptr; uint len= field->pack_length(); - ulong save_sql_mode; + sql_mode_t save_sql_mode; bool save_got_warning; if (!(column_item= get_column_item(column_item, === modified file 'sql/set_var.h' --- a/sql/set_var.h 2010-11-29 11:28:55 +0000 +++ b/sql/set_var.h 2010-11-29 16:27:58 +0000 @@ -309,8 +309,8 @@ int sql_set_variables(THD *thd, Listtime_zone_used; - ulong sql_mode, saved_mode= thd->variables.sql_mode; + sql_mode_t sql_mode, saved_mode= thd->variables.sql_mode; Open_tables_backup open_tables_state_backup; Stored_program_creation_ctx *creation_ctx; @@ -636,7 +636,7 @@ db_find_routine(THD *thd, int type, sp_n modified= table->field[MYSQL_PROC_FIELD_MODIFIED]->val_int(); created= table->field[MYSQL_PROC_FIELD_CREATED]->val_int(); - sql_mode= (ulong) table->field[MYSQL_PROC_FIELD_SQL_MODE]->val_int(); + sql_mode= (sql_mode_t) table->field[MYSQL_PROC_FIELD_SQL_MODE]->val_int(); table->field[MYSQL_PROC_FIELD_COMMENT]->val_str(&str, &str); @@ -713,11 +713,11 @@ Silence_deprecated_warning::handle_condi @retval 0 error */ -static sp_head *sp_compile(THD *thd, String *defstr, ulong sql_mode, +static sp_head *sp_compile(THD *thd, String *defstr, sql_mode_t sql_mode, Stored_program_creation_ctx *creation_ctx) { sp_head *sp; - ulong old_sql_mode= thd->variables.sql_mode; + sql_mode_t old_sql_mode= thd->variables.sql_mode; ha_rows old_select_limit= thd->variables.select_limit; sp_rcontext *old_spcont= thd->spcont; Silence_deprecated_warning warning_handler; @@ -758,7 +758,7 @@ static sp_head *sp_compile(THD *thd, Str static int db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp, - ulong sql_mode, const char *params, const char *returns, + sql_mode_t sql_mode, const char *params, const char *returns, const char *body, st_sp_chistics &chistics, const char *definer, longlong created, longlong modified, Stored_program_creation_ctx *creation_ctx) @@ -924,7 +924,7 @@ sp_create_routine(THD *thd, int type, sp int ret; TABLE *table; char definer[USER_HOST_BUFF_SIZE]; - ulong saved_mode= thd->variables.sql_mode; + sql_mode_t saved_mode= thd->variables.sql_mode; MDL_key::enum_mdl_namespace mdl_type= type == TYPE_ENUM_FUNCTION ? MDL_key::FUNCTION : MDL_key::PROCEDURE; @@ -2093,9 +2093,9 @@ create_string(THD *thd, String *buf, st_sp_chistics *chistics, const LEX_STRING *definer_user, const LEX_STRING *definer_host, - ulong sql_mode) + sql_mode_t sql_mode) { - ulong old_sql_mode= thd->variables.sql_mode; + sql_mode_t old_sql_mode= thd->variables.sql_mode; /* Make some room to begin with */ if (buf->alloc(100 + dblen + 1 + namelen + paramslen + returnslen + bodylen + chistics->comment.length + 10 /* length of " DEFINER= "*/ + @@ -2177,7 +2177,7 @@ create_string(THD *thd, String *buf, sp_head * sp_load_for_information_schema(THD *thd, TABLE *proc_table, String *db, - String *name, ulong sql_mode, int type, + String *name, sql_mode_t sql_mode, int type, const char *returns, const char *params, bool *free_sp_head) { === modified file 'sql/sp.h' --- a/sql/sp.h 2010-11-18 16:34:56 +0000 +++ b/sql/sp.h 2010-11-29 16:27:58 +0000 @@ -188,7 +188,7 @@ TABLE *open_proc_table_for_read(THD *thd sp_head * sp_load_for_information_schema(THD *thd, TABLE *proc_table, String *db, - String *name, ulong sql_mode, int type, + String *name, sql_mode_t sql_mode, int type, const char *returns, const char *params, bool *free_sp_head); === modified file 'sql/sp_head.cc' --- a/sql/sp_head.cc 2010-11-29 11:28:55 +0000 +++ b/sql/sp_head.cc 2010-11-29 16:27:58 +0000 @@ -1204,7 +1204,7 @@ sp_head::execute(THD *thd, bool merge_da sp_rcontext *ctx= thd->spcont; bool err_status= FALSE; uint ip= 0; - ulong save_sql_mode; + sql_mode_t save_sql_mode; bool save_abort_on_warning; Query_arena *old_arena; /* per-instruction arena */ @@ -2479,7 +2479,7 @@ sp_head::do_cont_backpatch() void sp_head::set_info(longlong created, longlong modified, - st_sp_chistics *chistics, ulong sql_mode) + st_sp_chistics *chistics, sql_mode_t sql_mode) { m_created= created; m_modified= modified; === modified file 'sql/sp_head.h' --- a/sql/sp_head.h 2010-11-16 12:14:06 +0000 +++ b/sql/sp_head.h 2010-11-29 16:27:58 +0000 @@ -172,7 +172,7 @@ public: const char *m_tmp_query; ///< Temporary pointer to sub query string st_sp_chistics *m_chistics; - ulong m_sql_mode; ///< For SHOW CREATE and execution + sql_mode_t m_sql_mode; ///< For SHOW CREATE and execution LEX_STRING m_qname; ///< db.name bool m_explicit_name; ///< Prepend the db name? */ LEX_STRING m_db; @@ -394,7 +394,7 @@ public: Create_field *field_def); void set_info(longlong created, longlong modified, - st_sp_chistics *chistics, ulong sql_mode); + st_sp_chistics *chistics, sql_mode_t sql_mode); void set_definer(const char *definer, uint definerlen); void set_definer(const LEX_STRING *user_name, const LEX_STRING *host_name); === modified file 'sql/sql_acl.cc' --- a/sql/sql_acl.cc 2010-11-26 15:45:26 +0000 +++ b/sql/sql_acl.cc 2010-11-29 16:27:58 +0000 @@ -703,7 +703,7 @@ static my_bool acl_load(THD *thd, TABLE_ bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE; char tmp_name[NAME_LEN+1]; int password_length; - ulong old_sql_mode= thd->variables.sql_mode; + sql_mode_t old_sql_mode= thd->variables.sql_mode; DBUG_ENTER("acl_load"); thd->variables.sql_mode&= ~MODE_PAD_CHAR_TO_FULL_LENGTH; @@ -4290,7 +4290,7 @@ static my_bool grant_load(THD *thd, TABL bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE; MEM_ROOT **save_mem_root_ptr= my_pthread_getspecific_ptr(MEM_ROOT**, THR_MALLOC); - ulong old_sql_mode= thd->variables.sql_mode; + sql_mode_t old_sql_mode= thd->variables.sql_mode; DBUG_ENTER("grant_load"); thd->variables.sql_mode&= ~MODE_PAD_CHAR_TO_FULL_LENGTH; @@ -6497,7 +6497,7 @@ bool mysql_drop_user(THD *thd, List user_list(list); TABLE_LIST tables[GRANT_TABLES]; bool some_users_deleted= FALSE; - ulong old_sql_mode= thd->variables.sql_mode; + sql_mode_t old_sql_mode= thd->variables.sql_mode; bool save_binlog_row_based; DBUG_ENTER("mysql_drop_user"); === modified file 'sql/sql_cache.cc' --- a/sql/sql_cache.cc 2010-10-12 10:15:42 +0000 +++ b/sql/sql_cache.cc 2010-11-29 16:27:58 +0000 @@ -1222,7 +1222,7 @@ void Query_cache::store_query(THD *thd, DBUG_PRINT("qcache", ("\ long %d, 4.1: %d, bin_proto: %d, more results %d, pkt_nr: %d, \ CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \ -sql mode: 0x%lx, sort len: %lu, conncat len: %lu, div_precision: %lu, \ +sql mode: 0x%llx, sort len: %lu, conncat len: %lu, div_precision: %lu, \ def_week_frmt: %lu, in_trans: %d, autocommit: %d", (int)flags.client_long_flag, (int)flags.client_protocol_41, @@ -1564,7 +1564,7 @@ Query_cache::send_result_to_client(THD * DBUG_PRINT("qcache", ("\ long %d, 4.1: %d, bin_proto: %d, more results %d, pkt_nr: %d, \ CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \ -sql mode: 0x%lx, sort len: %lu, conncat len: %lu, div_precision: %lu, \ +sql mode: 0x%llx, sort len: %lu, conncat len: %lu, div_precision: %lu, \ def_week_frmt: %lu, in_trans: %d, autocommit: %d", (int)flags.client_long_flag, (int)flags.client_protocol_41, === modified file 'sql/sql_cache.h' --- a/sql/sql_cache.h 2010-07-02 02:58:51 +0000 +++ b/sql/sql_cache.h 2010-11-29 16:27:58 +0000 @@ -25,6 +25,7 @@ class Time_zone; struct LEX; struct TABLE; typedef struct st_changed_table_list CHANGED_TABLE_LIST; +typedef ulonglong sql_mode_t; /* Query cache */ @@ -532,7 +533,7 @@ struct Query_cache_query_flags uint collation_connection_num; ha_rows limit; Time_zone *time_zone; - ulong sql_mode; + sql_mode_t sql_mode; ulong max_sort_length; ulong group_concat_max_len; ulong default_week_format; === modified file 'sql/sql_class.h' --- a/sql/sql_class.h 2010-11-29 11:28:55 +0000 +++ b/sql/sql_class.h 2010-11-29 16:27:58 +0000 @@ -399,6 +399,8 @@ class Time_zone; #define THD_CHECK_SENTRY(thd) DBUG_ASSERT(thd->dbug_sentry == THD_SENTRY_MAGIC) +typedef ulonglong sql_mode_t; + typedef struct system_variables { /* @@ -420,7 +422,7 @@ typedef struct system_variables ulonglong long_query_time; /* A bitmap for switching optimizations on/off */ ulonglong optimizer_switch; - ulonglong sql_mode; ///< which non-standard SQL behaviour should be enabled + sql_mode_t sql_mode; ///< which non-standard SQL behaviour should be enabled ulonglong option_bits; ///< OPTION_xxx constants, e.g. OPTION_PROFILING ha_rows select_limit; ha_rows max_join_size; === modified file 'sql/sql_insert.cc' --- a/sql/sql_insert.cc 2010-11-29 03:17:40 +0000 +++ b/sql/sql_insert.cc 2010-11-29 16:27:58 +0000 @@ -1825,7 +1825,7 @@ public: char *record; enum_duplicates dup; time_t start_time; - ulong sql_mode; + sql_mode_t sql_mode; bool auto_increment_field_not_null; bool query_start_used, ignore, log_query, binlog_rows_query_log_events; bool stmt_depends_on_first_successful_insert_id_in_prev_stmt; === modified file 'sql/sql_select.h' --- a/sql/sql_select.h 2010-11-05 22:19:41 +0000 +++ b/sql/sql_select.h 2010-11-29 16:27:58 +0000 @@ -2070,7 +2070,7 @@ public: enum store_key_result result; THD *thd= to_field->table->in_use; enum_check_fields saved_count_cuted_fields= thd->count_cuted_fields; - ulonglong sql_mode= thd->variables.sql_mode; + sql_mode_t sql_mode= thd->variables.sql_mode; thd->variables.sql_mode&= ~(MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE); thd->count_cuted_fields= CHECK_FIELD_IGNORE; === modified file 'sql/sql_show.cc' --- a/sql/sql_show.cc 2010-11-29 11:28:55 +0000 +++ b/sql/sql_show.cc 2010-11-29 16:27:58 +0000 @@ -4478,7 +4478,7 @@ bool store_schema_params(THD *thd, TABLE &returns); sp= sp_load_for_information_schema(thd, proc_table, &sp_db, &sp_name, - (ulong) proc_table-> + (sql_mode_t) proc_table-> field[MYSQL_PROC_FIELD_SQL_MODE]->val_int(), routine_type, returns.c_ptr_safe(), @@ -4634,7 +4634,7 @@ bool store_schema_proc(THD *thd, TABLE * bool free_sp_head; proc_table->field[MYSQL_PROC_FIELD_RETURNS]->val_str(&returns); sp= sp_load_for_information_schema(thd, proc_table, &sp_db, &sp_name, - (ulong) proc_table-> + (sql_mode_t) proc_table-> field[MYSQL_PROC_FIELD_SQL_MODE]-> val_int(), TYPE_ENUM_FUNCTION, @@ -5095,7 +5095,7 @@ static bool store_trigger(THD *thd, TABL enum trg_event_type event, enum trg_action_time_type timing, LEX_STRING *trigger_stmt, - ulong sql_mode, + sql_mode_t sql_mode, LEX_STRING *definer_buffer, LEX_STRING *client_cs_name, LEX_STRING *connection_cl_name, @@ -5164,7 +5164,7 @@ static int get_schema_triggers_record(TH { LEX_STRING trigger_name; LEX_STRING trigger_stmt; - ulong sql_mode; + sql_mode_t sql_mode; char definer_holder[USER_HOST_BUFF_SIZE]; LEX_STRING definer_buffer; LEX_STRING client_cs_name; @@ -7543,7 +7543,7 @@ static bool show_create_trigger_impl(THD List fields; LEX_STRING trg_name; - ulonglong trg_sql_mode; + sql_mode_t trg_sql_mode; LEX_STRING trg_sql_mode_str; LEX_STRING trg_sql_original_stmt; LEX_STRING trg_client_cs_name; === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2010-11-29 11:28:55 +0000 +++ b/sql/sql_table.cc 2010-11-29 16:27:58 +0000 @@ -7075,7 +7075,7 @@ copy_data_between_tables(TABLE *from,TAB List all_fields; ha_rows examined_rows; bool auto_increment_field_copied= 0; - ulong save_sql_mode; + sql_mode_t save_sql_mode; ulonglong prev_insert_id; DBUG_ENTER("copy_data_between_tables"); === modified file 'sql/sql_trigger.cc' --- a/sql/sql_trigger.cc 2010-11-18 16:34:56 +0000 +++ b/sql/sql_trigger.cc 2010-11-29 16:27:58 +0000 @@ -576,7 +576,7 @@ bool Table_triggers_list::create_trigger LEX_STRING *trg_def; LEX_STRING definer_user; LEX_STRING definer_host; - ulonglong *trg_sql_mode; + sql_mode_t *trg_sql_mode; char trg_definer_holder[USER_HOST_BUFF_SIZE]; LEX_STRING *trg_definer; Item_trigger_field *trg_field; @@ -717,7 +717,7 @@ bool Table_triggers_list::create_trigger if (!(trg_def= alloc_lex_string(&table->mem_root)) || definitions_list.push_back(trg_def, &table->mem_root) || - !(trg_sql_mode= alloc_type(&table->mem_root)) || + !(trg_sql_mode= alloc_type(&table->mem_root)) || definition_modes_list.push_back(trg_sql_mode, &table->mem_root) || !(trg_definer= alloc_lex_string(&table->mem_root)) || @@ -932,7 +932,7 @@ bool Table_triggers_list::drop_trigger(T List_iterator_fast it_name(names_list); - List_iterator it_mod(definition_modes_list); + List_iterator it_mod(definition_modes_list); List_iterator it_def(definitions_list); List_iterator it_definer(definers_list); List_iterator it_client_cs_name(client_cs_names); @@ -1138,7 +1138,7 @@ bool Table_triggers_list::check_n_load(T List_iterator_fast it(triggers->definitions_list); LEX_STRING *trg_create_str; - ulonglong *trg_sql_mode; + sql_mode_t *trg_sql_mode; if (triggers->definition_modes_list.is_empty() && !triggers->definitions_list.is_empty()) @@ -1149,7 +1149,7 @@ bool Table_triggers_list::check_n_load(T We use one mode (current) for all triggers, because we have not information about mode in old format. */ - if (!(trg_sql_mode= alloc_type(&table->mem_root))) + if (!(trg_sql_mode= alloc_type(&table->mem_root))) { DBUG_RETURN(1); // EOM } @@ -1286,14 +1286,14 @@ bool Table_triggers_list::check_n_load(T if (!names_only && triggers->prepare_record1_accessors(table)) DBUG_RETURN(1); - List_iterator_fast itm(triggers->definition_modes_list); + List_iterator_fast itm(triggers->definition_modes_list); List_iterator_fast it_definer(triggers->definers_list); List_iterator_fast it_client_cs_name(triggers->client_cs_names); List_iterator_fast it_connection_cl_name(triggers->connection_cl_names); List_iterator_fast it_db_cl_name(triggers->db_cl_names); LEX *old_lex= thd->lex, lex; sp_rcontext *save_spcont= thd->spcont; - ulong save_sql_mode= thd->variables.sql_mode; + sql_mode_t save_sql_mode= thd->variables.sql_mode; LEX_STRING *on_table_name; thd->lex= &lex; @@ -1307,7 +1307,7 @@ bool Table_triggers_list::check_n_load(T trg_sql_mode= itm++; LEX_STRING *trg_definer= it_definer++; - thd->variables.sql_mode= (ulong)*trg_sql_mode; + thd->variables.sql_mode= *trg_sql_mode; Parser_state parser_state; if (parser_state.init(thd, trg_create_str->str, trg_create_str->length)) @@ -1346,7 +1346,7 @@ bool Table_triggers_list::check_n_load(T sp= triggers->bodies[event][action_time]= lex.sphead; lex.sphead= NULL; /* Prevent double cleanup. */ - sp->set_info(0, 0, &lex.sp_chistics, (ulong) *trg_sql_mode); + sp->set_info(0, 0, &lex.sp_chistics, *trg_sql_mode); sp->set_creation_ctx(creation_ctx); if (!trg_definer->length) @@ -1499,7 +1499,7 @@ bool Table_triggers_list::get_trigger_in trg_action_time_type time_type, LEX_STRING *trigger_name, LEX_STRING *trigger_stmt, - ulong *sql_mode, + sql_mode_t *sql_mode, LEX_STRING *definer, LEX_STRING *client_cs_name, LEX_STRING *connection_cl_name, @@ -1545,14 +1545,14 @@ bool Table_triggers_list::get_trigger_in void Table_triggers_list::get_trigger_info(THD *thd, int trigger_idx, LEX_STRING *trigger_name, - ulonglong *sql_mode, + sql_mode_t *sql_mode, LEX_STRING *sql_original_stmt, LEX_STRING *client_cs_name, LEX_STRING *connection_cl_name, LEX_STRING *db_cl_name) { List_iterator_fast it_trigger_name(names_list); - List_iterator_fast it_sql_mode(definition_modes_list); + List_iterator_fast it_sql_mode(definition_modes_list); List_iterator_fast it_sql_orig_stmt(definitions_list); List_iterator_fast it_client_cs_name(client_cs_names); List_iterator_fast it_connection_cl_name(connection_cl_names); @@ -1740,7 +1740,7 @@ Table_triggers_list::change_table_name_i { char path_buff[FN_REFLEN]; LEX_STRING *def, *on_table_name, new_def; - ulong save_sql_mode= thd->variables.sql_mode; + sql_mode_t save_sql_mode= thd->variables.sql_mode; List_iterator_fast it_def(definitions_list); List_iterator_fast it_on_table_name(on_table_names_list); List_iterator_fast it_mode(definition_modes_list); @@ -1753,7 +1753,7 @@ Table_triggers_list::change_table_name_i while ((def= it_def++)) { on_table_name= it_on_table_name++; - thd->variables.sql_mode= (ulong) *(it_mode++); + thd->variables.sql_mode= *(it_mode++); /* Construct CREATE TRIGGER statement with new table name. */ buff.length(0); === modified file 'sql/sql_trigger.h' --- a/sql/sql_trigger.h 2010-10-01 10:23:16 +0000 +++ b/sql/sql_trigger.h 2010-11-29 16:27:58 +0000 @@ -136,7 +136,7 @@ public: bool get_trigger_info(THD *thd, trg_event_type event, trg_action_time_type time_type, LEX_STRING *trigger_name, LEX_STRING *trigger_stmt, - ulong *sql_mode, + sql_mode_t *sql_mode, LEX_STRING *definer, LEX_STRING *client_cs_name, LEX_STRING *connection_cl_name, @@ -145,7 +145,7 @@ public: void get_trigger_info(THD *thd, int trigger_idx, LEX_STRING *trigger_name, - ulonglong *sql_mode, + sql_mode_t *sql_mode, LEX_STRING *sql_original_stmt, LEX_STRING *client_cs_name, LEX_STRING *connection_cl_name, === modified file 'sql/sql_view.cc' --- a/sql/sql_view.cc 2010-11-18 16:34:56 +0000 +++ b/sql/sql_view.cc 2010-11-29 16:27:58 +0000 @@ -836,7 +836,7 @@ static int mysql_register_view(THD *thd, view_query.length(0); is_query.length(0); { - ulong sql_mode= thd->variables.sql_mode & MODE_ANSI_QUOTES; + sql_mode_t sql_mode= thd->variables.sql_mode & MODE_ANSI_QUOTES; thd->variables.sql_mode&= ~MODE_ANSI_QUOTES; lex->unit.print(&view_query, QT_ORDINARY); @@ -1221,7 +1221,7 @@ bool mysql_make_view(THD *thd, File_pars view_select= &lex->select_lex; view_select->select_number= ++thd->select_number; - ulong saved_mode= thd->variables.sql_mode; + sql_mode_t saved_mode= thd->variables.sql_mode; /* switch off modes which can prevent normal parsing of VIEW - MODE_REAL_AS_FLOAT affect only CREATE TABLE parsing + MODE_PIPES_AS_CONCAT affect expression parsing === modified file 'sql/sys_vars.cc' --- a/sql/sys_vars.cc 2010-11-29 11:28:55 +0000 +++ b/sql/sys_vars.cc 2010-11-29 16:27:58 +0000 @@ -1939,7 +1939,7 @@ static Sys_var_ulong Sys_sort_buffer( VALID_RANGE(MIN_SORT_MEMORY, ULONG_MAX), DEFAULT(MAX_SORT_MEMORY), BLOCK_SIZE(1)); -export ulong expand_sql_mode(ulonglong sql_mode) +export sql_mode_t expand_sql_mode(sql_mode_t sql_mode) { if (sql_mode & MODE_ANSI) { @@ -2025,7 +2025,7 @@ static const char *sql_mode_names[]= "PAD_CHAR_TO_FULL_LENGTH", 0 }; -export bool sql_mode_string_representation(THD *thd, ulong sql_mode, +export bool sql_mode_string_representation(THD *thd, sql_mode_t sql_mode, LEX_STRING *ls) { set_to_string(thd, ls, sql_mode, sql_mode_names); --===============6516789048921442140== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-trunk-bugfixing-bug57035/ # testament_sha1: e94ac0cea22361920a41a59c624a2ecbb60e9a39 # timestamp: 2010-11-29 17:28:03 +0100 # source_branch: file:///export/home/x/mysql-5.5-bugteam/ # base_revision_id: georgi.kodinov@stripped\ # fmu8ywi4pv0vpya2 # # Begin bundle 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 ZPBpyenYpbmrhS4Oqc7tyf+LuSKcKEhccv1WAA== --===============6516789048921442140==--