diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/item.cc | 8 | ||||
-rw-r--r-- | sql/item.h | 15 | ||||
-rw-r--r-- | sql/item_subselect.cc | 28 | ||||
-rw-r--r-- | sql/mysqld.cc | 2 | ||||
-rw-r--r-- | sql/set_var.cc | 3 | ||||
-rw-r--r-- | sql/sql_parse.cc | 15 |
6 files changed, 28 insertions, 43 deletions
diff --git a/sql/item.cc b/sql/item.cc index ddb7b1e9a78..f778f0cb38e 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -5192,14 +5192,6 @@ bool Item_direct_view_ref::eq(const Item *item, bool binary_cmp) const return FALSE; } -void Item_null_helper::print(String *str) -{ - str->append(STRING_WITH_LEN("<null_helper>(")); - store->print(str); - str->append(')'); -} - - bool Item_default_value::eq(const Item *item, bool binary_cmp) const { return item->type() == DEFAULT_VALUE_ITEM && diff --git a/sql/item.h b/sql/item.h index 49f06ca31fa..f73017563dd 100644 --- a/sql/item.h +++ b/sql/item.h @@ -1893,21 +1893,6 @@ public: } }; -class Item_null_helper :public Item_ref_null_helper -{ - Item *store; -public: - Item_null_helper(Name_resolution_context *context_arg, - Item_in_subselect* master, Item *item, - const char *table_name_arg, const char *field_name_arg) - :Item_ref_null_helper(context_arg, master, (store= 0, &store), - table_name_arg, field_name_arg), - store(item) - { ref= &store; } - void print(String *str); -}; - - /* The following class is used to optimize comparing of date and bigint columns We need to save the original item ('ref') to be able to call diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 68f189ccf8c..6c2ff19825f 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -931,14 +931,14 @@ Item_in_subselect::single_value_transformer(JOIN *join, { Item *item= (Item*) select_lex->item_list.head(); - select_lex->item_list.empty(); - select_lex->item_list.push_back(new Item_int("Not_used", - (longlong) 1, 21)); - select_lex->ref_pointer_array[0]= select_lex->item_list.head(); if (select_lex->table_list.elements) { bool tmp; Item *having= item, *orig_item= item; + select_lex->item_list.empty(); + select_lex->item_list.push_back(new Item_int("Not_used", + (longlong) 1, 21)); + select_lex->ref_pointer_array[0]= select_lex->item_list.head(); item= func->create(expr, item); if (!abort_on_null && orig_item->maybe_null) { @@ -993,17 +993,15 @@ Item_in_subselect::single_value_transformer(JOIN *join, comparison functions can't be changed during fix_fields() we can assign select_lex->having here, and pass 0 as last argument (reference) to fix_fields() - */ - item= func->create(expr, - new Item_null_helper(&select_lex->context, - this, item, - (char *)"<no matter>", - (char *)"<result>")); -#ifdef CORRECT_BUT_TOO_SLOW_TO_BE_USABLE - if (!abort_on_null && left_expr->maybe_null) - item= new Item_cond_or(new Item_func_isnull(left_expr), item); -#endif - select_lex->having= join->having= item; + */ + select_lex->having= + join->having= + func->create(expr, + new Item_ref_null_helper(&select_lex->context, this, + select_lex->ref_pointer_array, + (char *)"<no matter>", + (char *)"<result>")); + select_lex->having_fix_field= 1; /* we do not check join->having->fixed, because comparison function diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 4de1e95d0f3..d4f65b5ae69 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -579,7 +579,7 @@ CHARSET_INFO *character_set_filesystem; SHOW_COMP_OPTION have_row_based_replication; SHOW_COMP_OPTION have_openssl, have_symlink, have_dlopen, have_query_cache; -SHOW_COMP_OPTION have_geometry, have_rtree_keys; +SHOW_COMP_OPTION have_geometry, have_rtree_keys, have_dlopen; SHOW_COMP_OPTION have_crypt, have_compress; /* Thread specific variables */ diff --git a/sql/set_var.cc b/sql/set_var.cc index a0cec361599..87d129c5a4a 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -638,7 +638,7 @@ sys_var_have_variable sys_have_blackhole_db("have_blackhole_engine", sys_var_have_variable sys_have_compress("have_compress", &have_compress); sys_var_have_variable sys_have_crypt("have_crypt", &have_crypt); sys_var_have_variable sys_have_csv_db("have_csv", &have_csv_db); -sys_var_have_variable sys_have_dlopen("have_dlopen", &have_dlopen); +sys_var_have_variable sys_have_dlopen("have_dynamic_loading", &have_dlopen); sys_var_have_variable sys_have_example_db("have_example_engine", &have_example_db); sys_var_have_variable sys_have_federated_db("have_federated_engine", @@ -913,6 +913,7 @@ SHOW_VAR init_vars[]= { {sys_prepared_stmt_count.name, (char*) &sys_prepared_stmt_count, SHOW_SYS}, {"port", (char*) &mysqld_port, SHOW_INT}, {sys_preload_buff_size.name, (char*) &sys_preload_buff_size, SHOW_SYS}, + {sys_prepared_stmt_count.name, (char*) &sys_prepared_stmt_count, SHOW_SYS}, {"protocol_version", (char*) &protocol_version, SHOW_INT}, {sys_query_alloc_block_size.name, (char*) &sys_query_alloc_block_size, SHOW_SYS}, diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 2886f6dc267..ebf4b3fed66 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1008,6 +1008,7 @@ static int check_connection(THD *thd) char *user= end; char *passwd= strend(user)+1; + uint user_len= passwd - user - 1; char *db= passwd; char db_buff[NAME_LEN+1]; // buffer to store db in utf8 char user_buff[USERNAME_LENGTH+1]; // buffer to store user in utf8 @@ -1040,11 +1041,19 @@ static int check_connection(THD *thd) db= db_buff; } - user_buff[copy_and_convert(user_buff, sizeof(user_buff)-1, - system_charset_info, user, strlen(user), - thd->charset(), &dummy_errors)]= '\0'; + user_buff[user_len= copy_and_convert(user_buff, sizeof(user_buff)-1, + system_charset_info, user, user_len, + thd->charset(), &dummy_errors)]= '\0'; user= user_buff; + /* If username starts and ends in "'", chop them off */ + if (user_len > 1 && user[0] == '\'' && user[user_len - 1] == '\'') + { + user[user_len-1]= 0; + user++; + user_len-= 2; + } + if (thd->main_security_ctx.user) x_free(thd->main_security_ctx.user); if (!(thd->main_security_ctx.user= my_strdup(user, MYF(0)))) |