mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
this has nothing to do with the bug#13012.
it's about mysql_admin_commands not being reexecution-safe (and CHECK still isn't) mysql-test/r/sp-error.result: optimize is now allowed in SP mysql-test/r/sp.result: test repair/optimize/analyze in SP mysql-test/t/backup.test: clean up after itself mysql-test/t/sp-error.test: optimize is now allowed in SP mysql-test/t/sp.test: test repair/optimize/analyze in SP sql/sp_head.cc: all mysql_admin commands return result set sql/sql_parse.cc: all mysql_admin commands modify table list and we should restore it for SP sql/sql_table.cc: optimization - don't execute views when no view is expected/allowed sql/sql_yacc.yy: optimize is now allowed in SP
This commit is contained in:
parent
33b58ea123
commit
da8b9967a8
9 changed files with 99 additions and 11 deletions
|
@ -768,7 +768,7 @@ BEGIN
|
|||
OPTIMIZE TABLE t1;
|
||||
RETURN 1;
|
||||
END|
|
||||
ERROR 0A000: OPTIMIZE TABLE is not allowed in stored procedures
|
||||
ERROR 0A000: Not allowed to return a result set from a function
|
||||
DROP FUNCTION IF EXISTS bug12995|
|
||||
CREATE FUNCTION bug12995() RETURNS INT
|
||||
BEGIN
|
||||
|
|
|
@ -4168,6 +4168,69 @@ test.t1 backup status OK
|
|||
Table Op Msg_type Msg_text
|
||||
test.t1 restore status OK
|
||||
drop procedure bug13012|
|
||||
create view v1 as select * from t1|
|
||||
create procedure bug13012()
|
||||
BEGIN
|
||||
REPAIR TABLE t1,t2,t3,v1;
|
||||
OPTIMIZE TABLE t1,t2,t3,v1;
|
||||
ANALYZE TABLE t1,t2,t3,v1;
|
||||
END|
|
||||
call bug13012()|
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
test.t2 repair status OK
|
||||
test.t3 repair error Table 'test.t3' doesn't exist
|
||||
test.v1 repair note Unknown table 'test.v1'
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
test.t2 optimize status OK
|
||||
test.t3 optimize error Table 'test.t3' doesn't exist
|
||||
test.v1 optimize note Unknown table 'test.v1'
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Table is already up to date
|
||||
test.t2 analyze status Table is already up to date
|
||||
test.t3 analyze error Table 'test.t3' doesn't exist
|
||||
test.v1 analyze note Unknown table 'test.v1'
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t3' doesn't exist
|
||||
call bug13012()|
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
test.t2 repair status OK
|
||||
test.t3 repair error Table 'test.t3' doesn't exist
|
||||
test.v1 repair note Unknown table 'test.v1'
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
test.t2 optimize status OK
|
||||
test.t3 optimize error Table 'test.t3' doesn't exist
|
||||
test.v1 optimize note Unknown table 'test.v1'
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Table is already up to date
|
||||
test.t2 analyze status Table is already up to date
|
||||
test.t3 analyze error Table 'test.t3' doesn't exist
|
||||
test.v1 analyze note Unknown table 'test.v1'
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t3' doesn't exist
|
||||
call bug13012()|
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
test.t2 repair status OK
|
||||
test.t3 repair error Table 'test.t3' doesn't exist
|
||||
test.v1 repair note Unknown table 'test.v1'
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
test.t2 optimize status OK
|
||||
test.t3 optimize error Table 'test.t3' doesn't exist
|
||||
test.v1 optimize note Unknown table 'test.v1'
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status Table is already up to date
|
||||
test.t2 analyze status Table is already up to date
|
||||
test.t3 analyze error Table 'test.t3' doesn't exist
|
||||
test.v1 analyze note Unknown table 'test.v1'
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t3' doesn't exist
|
||||
drop procedure bug13012|
|
||||
drop view v1;
|
||||
select * from t1|
|
||||
a
|
||||
a - table column
|
||||
|
|
|
@ -52,5 +52,6 @@ unlock tables;
|
|||
connection con1;
|
||||
reap;
|
||||
drop table t5;
|
||||
--system rm $MYSQL_TEST_DIR/var/tmp/t?.*
|
||||
|
||||
# End of 4.1 tests
|
||||
|
|
|
@ -1095,7 +1095,7 @@ delimiter |;
|
|||
--disable_warnings
|
||||
DROP FUNCTION IF EXISTS bug12953|
|
||||
--enable_warnings
|
||||
--error ER_SP_BADSTATEMENT
|
||||
--error ER_SP_NO_RETSET
|
||||
CREATE FUNCTION bug12953() RETURNS INT
|
||||
BEGIN
|
||||
OPTIMIZE TABLE t1;
|
||||
|
|
|
@ -4961,9 +4961,20 @@ BEGIN
|
|||
DROP TABLE t1;
|
||||
RESTORE TABLE t1 FROM '../tmp';
|
||||
END|
|
||||
--replace_result ": 7" ": X" ": 17" ": X" $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
call bug13012()|
|
||||
drop procedure bug13012|
|
||||
create view v1 as select * from t1|
|
||||
create procedure bug13012()
|
||||
BEGIN
|
||||
REPAIR TABLE t1,t2,t3,v1;
|
||||
OPTIMIZE TABLE t1,t2,t3,v1;
|
||||
ANALYZE TABLE t1,t2,t3,v1;
|
||||
END|
|
||||
call bug13012()|
|
||||
call bug13012()|
|
||||
call bug13012()|
|
||||
drop procedure bug13012|
|
||||
drop view v1;
|
||||
select * from t1|
|
||||
|
||||
#
|
||||
|
|
|
@ -72,7 +72,11 @@ sp_get_flags_for_command(LEX *lex)
|
|||
}
|
||||
/* fallthrough */
|
||||
case SQLCOM_ANALYZE:
|
||||
case SQLCOM_OPTIMIZE:
|
||||
case SQLCOM_PRELOAD_KEYS:
|
||||
case SQLCOM_ASSIGN_TO_KEYCACHE:
|
||||
case SQLCOM_CHECKSUM:
|
||||
case SQLCOM_CHECK:
|
||||
case SQLCOM_HA_READ:
|
||||
case SQLCOM_SHOW_BINLOGS:
|
||||
case SQLCOM_SHOW_BINLOG_EVENTS:
|
||||
|
|
|
@ -2614,7 +2614,8 @@ mysql_execute_command(THD *thd)
|
|||
goto error; /* purecov: inspected */
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res = mysql_backup_table(thd, first_table);
|
||||
|
||||
(TABLE_LIST*) select_lex->table_list.first=first_table;
|
||||
lex->query_tables=all_tables;
|
||||
break;
|
||||
}
|
||||
case SQLCOM_RESTORE_TABLE:
|
||||
|
@ -2626,6 +2627,8 @@ mysql_execute_command(THD *thd)
|
|||
goto error; /* purecov: inspected */
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res = mysql_restore_table(thd, first_table);
|
||||
(TABLE_LIST*) select_lex->table_list.first=first_table;
|
||||
lex->query_tables=all_tables;
|
||||
break;
|
||||
}
|
||||
case SQLCOM_ASSIGN_TO_KEYCACHE:
|
||||
|
@ -3128,6 +3131,8 @@ end_with_restore_list:
|
|||
mysql_bin_log.write(&qinfo);
|
||||
}
|
||||
}
|
||||
(TABLE_LIST*) select_lex->table_list.first=first_table;
|
||||
lex->query_tables=all_tables;
|
||||
break;
|
||||
}
|
||||
case SQLCOM_CHECK:
|
||||
|
@ -3138,6 +3143,8 @@ end_with_restore_list:
|
|||
goto error; /* purecov: inspected */
|
||||
thd->enable_slow_log= opt_log_slow_admin_statements;
|
||||
res = mysql_check_table(thd, first_table, &lex->check_opt);
|
||||
(TABLE_LIST*) select_lex->table_list.first=first_table;
|
||||
lex->query_tables=all_tables;
|
||||
break;
|
||||
}
|
||||
case SQLCOM_ANALYZE:
|
||||
|
@ -3158,6 +3165,8 @@ end_with_restore_list:
|
|||
mysql_bin_log.write(&qinfo);
|
||||
}
|
||||
}
|
||||
(TABLE_LIST*) select_lex->table_list.first=first_table;
|
||||
lex->query_tables=all_tables;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -3181,6 +3190,8 @@ end_with_restore_list:
|
|||
mysql_bin_log.write(&qinfo);
|
||||
}
|
||||
}
|
||||
(TABLE_LIST*) select_lex->table_list.first=first_table;
|
||||
lex->query_tables=all_tables;
|
||||
break;
|
||||
}
|
||||
case SQLCOM_UPDATE:
|
||||
|
|
|
@ -2222,9 +2222,12 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
|||
*/
|
||||
lex->query_tables= table;
|
||||
lex->query_tables_last= &table->next_global;
|
||||
lex->query_tables_own_last= 0;;
|
||||
lex->query_tables_own_last= 0;
|
||||
thd->no_warnings_for_error= no_warnings_for_error;
|
||||
open_and_lock_tables(thd, table);
|
||||
if (view_operator_func == NULL)
|
||||
simple_open_n_lock_tables(thd, table);
|
||||
else
|
||||
open_and_lock_tables(thd, table);
|
||||
thd->no_warnings_for_error= 0;
|
||||
table->next_global= save_next_global;
|
||||
table->next_local= save_next_local;
|
||||
|
|
|
@ -3779,11 +3779,6 @@ optimize:
|
|||
OPTIMIZE opt_no_write_to_binlog table_or_tables
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (lex->sphead)
|
||||
{
|
||||
my_error(ER_SP_BADSTATEMENT, MYF(0), "OPTIMIZE TABLE");
|
||||
YYABORT;
|
||||
}
|
||||
lex->sql_command = SQLCOM_OPTIMIZE;
|
||||
lex->no_write_to_binlog= $2;
|
||||
lex->check_opt.init();
|
||||
|
|
Loading…
Reference in a new issue