summaryrefslogtreecommitdiff
path: root/sql/sql_yacc.yy
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2019-06-12 10:25:34 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2019-06-12 10:30:01 +0300
commit4bbd8be482929984b9dceb077187d0fdbbcde4f0 (patch)
tree64e98c1390baa3c35f3a18845ef4155fc3092ac1 /sql/sql_yacc.yy
parent34b38ad726025b3ede5db0f5b7dfaaafc8d1e754 (diff)
parentb2f76bac035b62899207d443c48da8cd614cd05b (diff)
downloadmariadb-git-4bbd8be482929984b9dceb077187d0fdbbcde4f0.tar.gz
Merge 10.1 into 10.2
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r--sql/sql_yacc.yy52
1 files changed, 19 insertions, 33 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index cc7195361c0..90acbb94f8c 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -2539,6 +2539,8 @@ create:
create_or_replace opt_temporary TABLE_SYM opt_if_not_exists table_ident
{
LEX *lex= thd->lex;
+ if (!(lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_create_table()))
+ MYSQL_YYABORT;
lex->create_info.init();
if (lex->set_command_with_check(SQLCOM_CREATE_TABLE, $2, $1 | $4))
MYSQL_YYABORT;
@@ -2560,16 +2562,6 @@ create:
{
LEX *lex= thd->lex;
lex->current_select= &lex->select_lex;
- if ((lex->create_info.used_fields & HA_CREATE_USED_ENGINE) &&
- !lex->create_info.db_type)
- {
- lex->create_info.use_default_db_type(thd);
- push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
- ER_WARN_USING_OTHER_HANDLER,
- ER_THD(thd, ER_WARN_USING_OTHER_HANDLER),
- hton_name(lex->create_info.db_type)->str,
- $5->table.str);
- }
create_table_set_open_action_and_adjust_tables(lex);
}
| create_or_replace opt_unique INDEX_SYM opt_if_not_exists ident
@@ -5669,10 +5661,20 @@ create_table_options:
;
create_table_option:
- ENGINE_SYM opt_equal storage_engines
+ ENGINE_SYM opt_equal ident_or_text
{
- Lex->create_info.db_type= $3;
- Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
+ LEX *lex= Lex;
+ if (!lex->m_sql_cmd)
+ {
+ DBUG_ASSERT(lex->sql_command == SQLCOM_ALTER_TABLE);
+ if (!(lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_alter_table()))
+ MYSQL_YYABORT;
+ }
+ Storage_engine_name *opt=
+ lex->m_sql_cmd->option_storage_engine_name();
+ DBUG_ASSERT(opt); // Expect a proper Sql_cmd
+ *opt= Storage_engine_name($3);
+ lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
}
| MAX_ROWS opt_equal ulonglong_num
{
@@ -5937,21 +5939,10 @@ default_collation:
storage_engines:
ident_or_text
{
- plugin_ref plugin= ha_resolve_by_name(thd, &$1,
- thd->lex->create_info.tmp_table());
-
- if (plugin)
- $$= plugin_hton(plugin);
- else
- {
- if (thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION)
- my_yyabort_error((ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str));
- $$= 0;
- push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
- ER_UNKNOWN_STORAGE_ENGINE,
- ER_THD(thd, ER_UNKNOWN_STORAGE_ENGINE),
- $1.str);
- }
+ if (Storage_engine_name($1).
+ resolve_storage_engine_with_error(thd, &$$,
+ thd->lex->create_info.tmp_table()))
+ MYSQL_YYABORT;
}
;
@@ -7744,11 +7735,6 @@ alter_list_item:
{
LEX *lex=Lex;
lex->alter_info.flags|= Alter_info::ALTER_OPTIONS;
- if ((lex->create_info.used_fields & HA_CREATE_USED_ENGINE) &&
- !lex->create_info.db_type)
- {
- lex->create_info.used_fields&= ~HA_CREATE_USED_ENGINE;
- }
}
| FORCE_SYM
{