summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-09-03 09:26:54 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2020-09-03 09:26:54 +0300
commitc3752cef3c34589ea95a7ab66cff3dd5b11290d5 (patch)
treec7b8eb21dedd3139dacf2c0a12bed6e362afa1d9 /sql
parent56ae0adee35c1bc053711a8579857e6b0301eb80 (diff)
parent2a93e632b1676b6df3dde150888d6428a57f8399 (diff)
downloadmariadb-git-c3752cef3c34589ea95a7ab66cff3dd5b11290d5.tar.gz
Merge 10.2 into 10.3
Diffstat (limited to 'sql')
-rw-r--r--sql/debug_sync.cc4
-rw-r--r--sql/mysqld.cc3
-rw-r--r--sql/net_serv.cc3
-rw-r--r--sql/opt_range.cc16
-rw-r--r--sql/rpl_filter.cc52
-rw-r--r--sql/sql_insert.cc6
-rw-r--r--sql/sql_select.cc3
-rw-r--r--sql/sql_string.h3
-rw-r--r--sql/sql_test.cc6
-rw-r--r--sql/wsrep_mysqld.cc6
10 files changed, 69 insertions, 33 deletions
diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc
index 39ceaadc671..c037af40e33 100644
--- a/sql/debug_sync.cc
+++ b/sql/debug_sync.cc
@@ -1,4 +1,5 @@
/* Copyright (c) 2009, 2013, Oracle and/or its affiliates.
+ Copyright (c) 2013, 2020, MariaDB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -319,7 +320,8 @@ static char *debug_sync_bmove_len(char *to, char *to_end,
DBUG_ASSERT(to_end);
DBUG_ASSERT(!length || from);
set_if_smaller(length, (size_t) (to_end - to));
- memcpy(to, from, length);
+ if (length)
+ memcpy(to, from, length);
return (to + length);
}
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 377d549a045..d6555702d9c 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -4127,7 +4127,8 @@ rpl_make_log_name(const char *opt,
const char *ext)
{
DBUG_ENTER("rpl_make_log_name");
- DBUG_PRINT("enter", ("opt: %s, def: %s, ext: %s", opt, def, ext));
+ DBUG_PRINT("enter", ("opt: %s, def: %s, ext: %s", opt ? opt : "(null)",
+ def, ext));
char buff[FN_REFLEN];
const char *base= opt ? opt : def;
unsigned int options=
diff --git a/sql/net_serv.cc b/sql/net_serv.cc
index 5d2ad6d17a6..b324f4a362f 100644
--- a/sql/net_serv.cc
+++ b/sql/net_serv.cc
@@ -607,7 +607,8 @@ net_write_buff(NET *net, const uchar *packet, size_t len)
return net_real_write(net, packet, len) ? 1 : 0;
/* Send out rest of the blocks as full sized blocks */
}
- memcpy((char*) net->write_pos,packet,len);
+ if (len)
+ memcpy((char*) net->write_pos,packet,len);
net->write_pos+= len;
return 0;
}
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 0edc1665ac9..a00e0ebdfb0 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -7583,13 +7583,15 @@ SEL_TREE *Item_bool_func::get_full_func_mm_tree(RANGE_OPT_PARAM *param,
table_map param_comp= ~(param->prev_tables | param->read_tables |
param->current_table);
#ifdef HAVE_SPATIAL
- Field::geometry_type sav_geom_type;
- const bool geometry= field_item->field->type() == MYSQL_TYPE_GEOMETRY;
- if (geometry)
+ Field::geometry_type sav_geom_type= Field::GEOM_GEOMETRY, *geom_type=
+ field_item->field->type() == MYSQL_TYPE_GEOMETRY
+ ? &(static_cast<Field_geom*>(field_item->field))->geom_type
+ : NULL;
+ if (geom_type)
{
- sav_geom_type= ((Field_geom*) field_item->field)->geom_type;
+ sav_geom_type= *geom_type;
/* We have to be able to store all sorts of spatial features here */
- ((Field_geom*) field_item->field)->geom_type= Field::GEOM_GEOMETRY;
+ *geom_type= Field::GEOM_GEOMETRY;
}
#endif /*HAVE_SPATIAL*/
@@ -7620,9 +7622,9 @@ SEL_TREE *Item_bool_func::get_full_func_mm_tree(RANGE_OPT_PARAM *param,
}
#ifdef HAVE_SPATIAL
- if (geometry)
+ if (geom_type)
{
- ((Field_geom*) field_item->field)->geom_type= sav_geom_type;
+ *geom_type= sav_geom_type;
}
#endif /*HAVE_SPATIAL*/
DBUG_RETURN(ftree);
diff --git a/sql/rpl_filter.cc b/sql/rpl_filter.cc
index b167b849923..3d1c3102e49 100644
--- a/sql/rpl_filter.cc
+++ b/sql/rpl_filter.cc
@@ -349,14 +349,20 @@ Rpl_filter::set_do_table(const char* table_spec)
int status;
if (do_table_inited)
- my_hash_reset(&do_table);
+ {
+ my_hash_free(&do_table);
+ do_table_inited= 0;
+ }
status= parse_filter_rule(table_spec, &Rpl_filter::add_do_table);
- if (!do_table.records)
+ if (do_table_inited && status)
{
- my_hash_free(&do_table);
- do_table_inited= 0;
+ if (!do_table.records)
+ {
+ my_hash_free(&do_table);
+ do_table_inited= 0;
+ }
}
return status;
@@ -369,14 +375,20 @@ Rpl_filter::set_ignore_table(const char* table_spec)
int status;
if (ignore_table_inited)
- my_hash_reset(&ignore_table);
+ {
+ my_hash_free(&ignore_table);
+ ignore_table_inited= 0;
+ }
status= parse_filter_rule(table_spec, &Rpl_filter::add_ignore_table);
- if (!ignore_table.records)
+ if (ignore_table_inited && status)
{
- my_hash_free(&ignore_table);
- ignore_table_inited= 0;
+ if (!ignore_table.records)
+ {
+ my_hash_free(&ignore_table);
+ ignore_table_inited= 0;
+ }
}
return status;
@@ -411,14 +423,20 @@ Rpl_filter::set_wild_do_table(const char* table_spec)
int status;
if (wild_do_table_inited)
+ {
free_string_array(&wild_do_table);
+ wild_do_table_inited= 0;
+ }
status= parse_filter_rule(table_spec, &Rpl_filter::add_wild_do_table);
- if (!wild_do_table.elements)
+ if (wild_do_table_inited && status)
{
- delete_dynamic(&wild_do_table);
- wild_do_table_inited= 0;
+ if (!wild_do_table.elements)
+ {
+ delete_dynamic(&wild_do_table);
+ wild_do_table_inited= 0;
+ }
}
return status;
@@ -431,14 +449,20 @@ Rpl_filter::set_wild_ignore_table(const char* table_spec)
int status;
if (wild_ignore_table_inited)
+ {
free_string_array(&wild_ignore_table);
+ wild_ignore_table_inited= 0;
+ }
status= parse_filter_rule(table_spec, &Rpl_filter::add_wild_ignore_table);
- if (!wild_ignore_table.elements)
+ if (wild_ignore_table_inited && status)
{
- delete_dynamic(&wild_ignore_table);
- wild_ignore_table_inited= 0;
+ if (!wild_ignore_table.elements)
+ {
+ delete_dynamic(&wild_ignore_table);
+ wild_ignore_table_inited= 0;
+ }
}
return status;
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index b574e7ab9d7..5ec1387a6eb 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -1793,15 +1793,13 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
}
if (table->vfield)
{
- my_bool abort_on_warning= thd->abort_on_warning;
/*
We have not yet called update_virtual_fields(VOL_UPDATE_FOR_READ)
in handler methods for the just read row in record[1].
*/
table->move_fields(table->field, table->record[1], table->record[0]);
- thd->abort_on_warning= 0;
- table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_REPLACE);
- thd->abort_on_warning= abort_on_warning;
+ if (table->update_virtual_fields(table->file, VCOL_UPDATE_FOR_REPLACE))
+ goto err;
table->move_fields(table->field, table->record[0], table->record[1]);
}
if (info->handle_duplicates == DUP_UPDATE)
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 34c137c4732..10ba86b41db 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -22790,6 +22790,9 @@ check_reverse_order:
else if (select && select->quick)
select->quick->need_sorted_output();
+ tab->read_record.unlock_row= (tab->type == JT_EQ_REF) ?
+ join_read_key_unlock_row : rr_unlock_row;
+
} // QEP has been modified
/*
diff --git a/sql/sql_string.h b/sql/sql_string.h
index f56540c2975..11c3f0cd573 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -576,7 +576,8 @@ public:
}
void q_append(const char *data, size_t data_len)
{
- memcpy(Ptr + str_length, data, data_len);
+ if (data_len)
+ memcpy(Ptr + str_length, data, data_len);
DBUG_ASSERT(str_length <= UINT_MAX32 - data_len);
str_length += (uint)data_len;
}
diff --git a/sql/sql_test.cc b/sql/sql_test.cc
index 6f144cbcf33..0e73bfd7737 100644
--- a/sql/sql_test.cc
+++ b/sql/sql_test.cc
@@ -388,10 +388,10 @@ void print_sjm(SJ_MATERIALIZATION_INFO *sjm)
/*
Debugging help: force List<...>::elem function not be removed as unused.
*/
-Item* (List<Item>:: *dbug_list_item_elem_ptr)(uint)= &List<Item>::elem;
-Item_equal* (List<Item_equal>:: *dbug_list_item_equal_elem_ptr)(uint)=
+Item* (List<Item>::*dbug_list_item_elem_ptr)(uint)= &List<Item>::elem;
+Item_equal* (List<Item_equal>::*dbug_list_item_equal_elem_ptr)(uint)=
&List<Item_equal>::elem;
-TABLE_LIST* (List<TABLE_LIST>:: *dbug_list_table_list_elem_ptr)(uint) =
+TABLE_LIST* (List<TABLE_LIST>::*dbug_list_table_list_elem_ptr)(uint) =
&List<TABLE_LIST>::elem;
#endif
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc
index cfba0ace2cb..20f2cd99edd 100644
--- a/sql/wsrep_mysqld.cc
+++ b/sql/wsrep_mysqld.cc
@@ -2900,7 +2900,11 @@ static int wsrep_create_trigger_query(THD *thd, uchar** buf, size_t* buf_len)
definer_host.length= 0;
}
- stmt_query.append(STRING_WITH_LEN("CREATE "));
+ const LEX_CSTRING command[3]=
+ {{ C_STRING_WITH_LEN("CREATE ") },
+ { C_STRING_WITH_LEN("ALTER ") },
+ { C_STRING_WITH_LEN("CREATE OR REPLACE ") }};
+ stmt_query.append(command[thd->lex->create_view->mode]);
append_definer(thd, &stmt_query, &definer_user, &definer_host);