summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-05-23 08:59:03 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-05-23 08:59:03 +0300
commitb61700c22104b513caa9a85e5c6529aa5f2bf4e4 (patch)
tree23f776bd41e4388241ebb43eb8102ca6d36d1b4a /sql
parent70df2bef7acffed1e7da21ba7b9c644a32e36f3a (diff)
parent725e47bfb524f4b1d29076c8777056bedd5f00ea (diff)
downloadmariadb-git-b61700c22104b513caa9a85e5c6529aa5f2bf4e4.tar.gz
Merge 10.0 into 10.1
Diffstat (limited to 'sql')
-rw-r--r--sql/discover.cc3
-rw-r--r--sql/filesort.cc1
-rw-r--r--sql/log.cc7
-rw-r--r--sql/mysqld.cc2
-rw-r--r--sql/opt_range.cc7
-rw-r--r--sql/opt_subselect.cc31
-rw-r--r--sql/records.cc2
-rw-r--r--sql/sql_prepare.cc2
-rw-r--r--sql/sql_repl.cc6
-rw-r--r--sql/sql_show.cc2
-rw-r--r--sql/sys_vars.cc3
11 files changed, 53 insertions, 13 deletions
diff --git a/sql/discover.cc b/sql/discover.cc
index d8ed718fc58..d8bf6ca79c5 100644
--- a/sql/discover.cc
+++ b/sql/discover.cc
@@ -89,8 +89,7 @@ int readfrm(const char *name, const uchar **frmdata, size_t *len)
error= 0;
err:
- if (file > 0)
- (void) mysql_file_close(file, MYF(MY_WME));
+ (void) mysql_file_close(file, MYF(MY_WME));
err_end: /* Here when no file */
DBUG_RETURN (error);
diff --git a/sql/filesort.cc b/sql/filesort.cc
index 23674b937fc..3f174029d48 100644
--- a/sql/filesort.cc
+++ b/sql/filesort.cc
@@ -925,6 +925,7 @@ write_keys(Sort_param *param, Filesort_info *fs_info, uint count,
/* check we won't have more buffpeks than we can possibly keep in memory */
if (my_b_tell(buffpek_pointers) + sizeof(BUFFPEK) > (ulonglong)UINT_MAX)
goto err;
+ bzero(&buffpek, sizeof(buffpek));
buffpek.file_pos= my_b_tell(tempfile);
if ((ha_rows) count > param->max_rows)
count=(uint) param->max_rows; /* purecov: inspected */
diff --git a/sql/log.cc b/sql/log.cc
index 54d40896305..665157a06c5 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -5640,13 +5640,20 @@ int THD::binlog_write_table_map(TABLE *table, bool is_transactional,
IO_CACHE *file=
cache_mngr->get_binlog_cache_log(use_trans_cache(this, is_transactional));
Log_event_writer writer(file);
+ binlog_cache_data *cache_data=
+ cache_mngr->get_binlog_cache_data(use_trans_cache(this, is_transactional));
+
if (with_annotate && *with_annotate)
{
Annotate_rows_log_event anno(table->in_use, is_transactional, false);
/* Annotate event should be written not more than once */
*with_annotate= 0;
if ((error= writer.write(&anno)))
+ {
+ if (my_errno == EFBIG)
+ cache_data->set_incident();
DBUG_RETURN(error);
+ }
}
if ((error= writer.write(&the_event)))
DBUG_RETURN(error);
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index abb9706c59b..1e6ee4decbe 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -8174,7 +8174,7 @@ static int show_default_keycache(THD *thd, SHOW_VAR *var, char *buff,
{
struct st_data {
KEY_CACHE_STATISTICS stats;
- SHOW_VAR var[8];
+ SHOW_VAR var[9];
} *data;
SHOW_VAR *v;
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index bb4f7370ac9..e4e29378c25 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -6967,7 +6967,10 @@ QUICK_SELECT_I *TRP_ROR_UNION::make_quick(PARAM *param,
{
if (!(quick= (*scan)->make_quick(param, FALSE, &quick_roru->alloc)) ||
quick_roru->push_quick_back(quick))
+ {
+ delete quick_roru;
DBUG_RETURN(NULL);
+ }
}
quick_roru->records= records;
quick_roru->read_time= read_cost;
@@ -10567,9 +10570,7 @@ QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table,
*/
thd->mem_root= old_root;
- if (!quick || create_err)
- return 0; /* no ranges found */
- if (quick->init())
+ if (!quick || create_err || quick->init())
goto err;
quick->records= records;
diff --git a/sql/opt_subselect.cc b/sql/opt_subselect.cc
index 0335a663ec3..dd6c2c50b32 100644
--- a/sql/opt_subselect.cc
+++ b/sql/opt_subselect.cc
@@ -1105,7 +1105,26 @@ bool convert_join_subqueries_to_semijoins(JOIN *join)
do
{
embedded= embedding;
- if (MY_TEST(embedded->outer_join))
+ bool block_conversion_to_sj= false;
+ if (embedded->on_expr)
+ {
+ /*
+ Conversion of an IN subquery predicate into semi-join
+ is blocked now if the predicate occurs:
+ - in the ON expression of an outer join
+ - in the ON expression of an inner join embedded directly
+ or indirectly in the inner nest of an outer join
+ */
+ for (TABLE_LIST *tl= embedded; tl; tl= tl->embedding)
+ {
+ if (tl->outer_join)
+ {
+ block_conversion_to_sj= true;
+ break;
+ }
+ }
+ }
+ if (block_conversion_to_sj)
{
Item *cond= embedded->on_expr;
if (!cond)
@@ -1144,6 +1163,16 @@ bool convert_join_subqueries_to_semijoins(JOIN *join)
in_subq->block_conversion_to_sj();
}
}
+
+ if (join->select_options & SELECT_STRAIGHT_JOIN)
+ {
+ /* Block conversion to semijoins for all candidates */
+ li.rewind();
+ while ((in_subq= li++))
+ {
+ in_subq->block_conversion_to_sj();
+ }
+ }
li.rewind();
/* First, convert child join's subqueries. We proceed bottom-up here */
diff --git a/sql/records.cc b/sql/records.cc
index ebda0ed35b0..3901161a2cb 100644
--- a/sql/records.cc
+++ b/sql/records.cc
@@ -69,7 +69,7 @@ static int rr_index_desc(READ_RECORD *info);
bool init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table,
bool print_error, uint idx, bool reverse)
{
- int error;
+ int error= 0;
DBUG_ENTER("init_read_record_idx");
empty_record(table);
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 97513e9e6b8..e0dd04b08f6 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -3306,7 +3306,7 @@ void mysql_stmt_get_longdata(THD *thd, char *packet, ulong packet_length)
{
stmt->state= Query_arena::STMT_ERROR;
stmt->last_errno= thd->get_stmt_da()->sql_errno();
- strncpy(stmt->last_error, thd->get_stmt_da()->message(), MYSQL_ERRMSG_SIZE);
+ strmake_buf(stmt->last_error, thd->get_stmt_da()->message());
}
thd->set_stmt_da(save_stmt_da);
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 6fedda95959..09248486bec 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -3918,9 +3918,6 @@ bool mysql_show_binlog_events(THD* thd)
Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
DBUG_RETURN(TRUE);
- Format_description_log_event *description_event= new
- Format_description_log_event(3); /* MySQL 4.0 by default */
-
DBUG_ASSERT(thd->lex->sql_command == SQLCOM_SHOW_BINLOG_EVENTS ||
thd->lex->sql_command == SQLCOM_SHOW_RELAYLOG_EVENTS);
@@ -3941,6 +3938,9 @@ bool mysql_show_binlog_events(THD* thd)
binary_log= &(mi->rli.relay_log);
}
+ Format_description_log_event *description_event= new
+ Format_description_log_event(3); /* MySQL 4.0 by default */
+
if (binary_log->is_open())
{
SELECT_LEX_UNIT *unit= &thd->lex->unit;
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index c44a281af9d..fadaa58ceed 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -3222,7 +3222,7 @@ static bool show_status_array(THD *thd, const char *wild,
for (; variables->name; variables++)
{
- bool wild_checked;
+ bool wild_checked= 0;
strnmov(prefix_end, variables->name, len);
name_buffer[sizeof(name_buffer)-1]=0; /* Safety */
diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc
index 1a6bb9a4e54..39945209c82 100644
--- a/sql/sys_vars.cc
+++ b/sql/sys_vars.cc
@@ -1719,7 +1719,10 @@ Sys_var_gtid_binlog_state::do_check(THD *thd, set_var *var)
return true;
}
if (res->length() == 0)
+ {
list= NULL;
+ list_len= 0;
+ }
else if (!(list= gtid_parse_string_to_list(res->ptr(), res->length(),
&list_len)))
{