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.
This commit is contained in:
parent
62feb0c5ae
commit
b3a1f42043
@ -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
|
|||||||
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),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user