summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/item.cc8
-rw-r--r--sql/item.h15
-rw-r--r--sql/item_subselect.cc28
-rw-r--r--sql/mysqld.cc2
-rw-r--r--sql/set_var.cc3
-rw-r--r--sql/sql_parse.cc15
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))))