Commit b3a1f420 authored by Sergey Vojtovich's avatar Sergey Vojtovich

MDEV-4786 - merge 10.0-monty - 10.0

Fixed connect.grant failure.

sql/create_options.cc:
  Keep "first" list intact, allocate new list for merge result.
  
  Normally "first" is options list on TABLE_SHARE. ALTER TABLE may fail
  after the merge and leave share with corrupt list in the table definition
  cache.
sql/create_options.h:
  Construct engine_option_value from another engine_option_value.
parent 62feb0c5
...@@ -743,9 +743,9 @@ engine_option_value *merge_engine_table_options(engine_option_value *first, ...@@ -743,9 +743,9 @@ engine_option_value *merge_engine_table_options(engine_option_value *first,
DBUG_ENTER("merge_engine_table_options"); DBUG_ENTER("merge_engine_table_options");
LINT_INIT(end); LINT_INIT(end);
/* find last element */ /* Create copy of first list */
if (first && second) for (opt= first, first= 0; opt; opt= opt->next)
for (end= first; end->next; end= end->next) /* no-op */; new (root) engine_option_value(opt, &first, &end);
for (opt= second; opt; opt= opt->next) for (opt= second; opt; opt= opt->next)
new (root) engine_option_value(opt->name, opt->value, opt->quoted_value, new (root) engine_option_value(opt->name, opt->value, opt->quoted_value,
......
...@@ -34,6 +34,13 @@ class engine_option_value: public Sql_alloc ...@@ -34,6 +34,13 @@ class engine_option_value: public Sql_alloc
bool parsed; ///< to detect unrecognized options bool parsed; ///< to detect unrecognized options
bool quoted_value; ///< option=VAL vs. option='VAL' bool quoted_value; ///< option=VAL vs. option='VAL'
engine_option_value(engine_option_value *src,
engine_option_value **start, engine_option_value **end) :
name(src->name), value(src->value),
next(NULL), parsed(src->parsed), quoted_value(src->quoted_value)
{
link(start, end);
}
engine_option_value(LEX_STRING &name_arg, LEX_STRING &value_arg, bool quoted, engine_option_value(LEX_STRING &name_arg, LEX_STRING &value_arg, bool quoted,
engine_option_value **start, engine_option_value **end) : engine_option_value **start, engine_option_value **end) :
name(name_arg), value(value_arg), name(name_arg), value(value_arg),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment