merge with 5.1
This commit is contained in:
commit
b170b126b0
@ -1080,7 +1080,8 @@ void check_command_args(struct st_command *command,
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
void handle_command_error(struct st_command *command, uint error)
|
||||
void handle_command_error(struct st_command *command, uint error,
|
||||
int sys_errno)
|
||||
{
|
||||
DBUG_ENTER("handle_command_error");
|
||||
DBUG_PRINT("enter", ("error: %d", error));
|
||||
@ -1096,12 +1097,13 @@ void handle_command_error(struct st_command *command, uint error)
|
||||
|
||||
if (i >= 0)
|
||||
{
|
||||
DBUG_PRINT("info", ("command \"%.*s\" failed with expected error: %d",
|
||||
command->first_word_len, command->query, error));
|
||||
DBUG_PRINT("info", ("command \"%.*s\" failed with expected error: %u, errno: %d",
|
||||
command->first_word_len, command->query, error,
|
||||
sys_errno));
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
die("command \"%.*s\" failed with wrong error: %d",
|
||||
command->first_word_len, command->query, error);
|
||||
die("command \"%.*s\" failed with wrong error: %u, errno: %d",
|
||||
command->first_word_len, command->query, error, sys_errno);
|
||||
}
|
||||
else if (command->expected_errors.err[0].type == ERR_ERRNO &&
|
||||
command->expected_errors.err[0].code.errnum != 0)
|
||||
@ -1810,7 +1812,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
|
||||
{
|
||||
my_close(fd, MYF(0));
|
||||
/* Remove the temporary file */
|
||||
my_delete(temp_file_path, MYF(0));
|
||||
my_delete(temp_file_path, MYF(MY_WME));
|
||||
die("Failed to write file '%s'", temp_file_path);
|
||||
}
|
||||
|
||||
@ -1818,7 +1820,7 @@ int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
|
||||
|
||||
my_close(fd, MYF(0));
|
||||
/* Remove the temporary file */
|
||||
my_delete(temp_file_path, MYF(0));
|
||||
my_delete(temp_file_path, MYF(MY_WME));
|
||||
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
@ -2932,8 +2934,8 @@ void do_remove_file(struct st_command *command)
|
||||
' ');
|
||||
|
||||
DBUG_PRINT("info", ("removing file: %s", ds_filename.str));
|
||||
error= my_delete(ds_filename.str, MYF(0)) != 0;
|
||||
handle_command_error(command, error);
|
||||
error= my_delete(ds_filename.str, MYF(disable_warnings ? 0 : MY_WME)) != 0;
|
||||
handle_command_error(command, error, my_errno);
|
||||
dynstr_free(&ds_filename);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
@ -2951,7 +2953,7 @@ void do_remove_file(struct st_command *command)
|
||||
|
||||
void do_remove_files_wildcard(struct st_command *command)
|
||||
{
|
||||
int error= 0;
|
||||
int error= 0, sys_errno= 0;
|
||||
uint i;
|
||||
MY_DIR *dir_info;
|
||||
FILEINFO *file;
|
||||
@ -2975,9 +2977,10 @@ void do_remove_files_wildcard(struct st_command *command)
|
||||
|
||||
DBUG_PRINT("info", ("listing directory: %s", dirname));
|
||||
/* Note that my_dir sorts the list if not given any flags */
|
||||
if (!(dir_info= my_dir(dirname, MYF(MY_DONT_SORT | MY_WANT_STAT))))
|
||||
if (!(dir_info= my_dir(dirname, MYF(MY_DONT_SORT | MY_WANT_STAT | MY_WME))))
|
||||
{
|
||||
error= 1;
|
||||
sys_errno= my_errno;
|
||||
goto end;
|
||||
}
|
||||
init_dynamic_string(&ds_file_to_remove, dirname, 1024, 1024);
|
||||
@ -2999,14 +3002,15 @@ void do_remove_files_wildcard(struct st_command *command)
|
||||
ds_file_to_remove.str[ds_directory.length + 1]= 0;
|
||||
dynstr_append(&ds_file_to_remove, file->name);
|
||||
DBUG_PRINT("info", ("removing file: %s", ds_file_to_remove.str));
|
||||
error= my_delete(ds_file_to_remove.str, MYF(0)) != 0;
|
||||
if ((error= (my_delete(ds_file_to_remove.str, MYF(MY_WME)) != 0)))
|
||||
sys_errno= my_errno;
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
my_dirend(dir_info);
|
||||
|
||||
end:
|
||||
handle_command_error(command, error);
|
||||
handle_command_error(command, error, sys_errno);
|
||||
dynstr_free(&ds_directory);
|
||||
dynstr_free(&ds_wild);
|
||||
dynstr_free(&ds_file_to_remove);
|
||||
@ -3044,8 +3048,8 @@ void do_copy_file(struct st_command *command)
|
||||
|
||||
DBUG_PRINT("info", ("Copy %s to %s", ds_from_file.str, ds_to_file.str));
|
||||
error= (my_copy(ds_from_file.str, ds_to_file.str,
|
||||
MYF(MY_DONT_OVERWRITE_FILE)) != 0);
|
||||
handle_command_error(command, error);
|
||||
MYF(MY_DONT_OVERWRITE_FILE | MY_WME)) != 0);
|
||||
handle_command_error(command, error, my_errno);
|
||||
dynstr_free(&ds_from_file);
|
||||
dynstr_free(&ds_to_file);
|
||||
DBUG_VOID_RETURN;
|
||||
@ -3080,8 +3084,8 @@ void do_move_file(struct st_command *command)
|
||||
|
||||
DBUG_PRINT("info", ("Move %s to %s", ds_from_file.str, ds_to_file.str));
|
||||
error= (my_rename(ds_from_file.str, ds_to_file.str,
|
||||
MYF(0)) != 0);
|
||||
handle_command_error(command, error);
|
||||
MYF(disable_warnings ? 0 : MY_WME)) != 0);
|
||||
handle_command_error(command, error, my_errno);
|
||||
dynstr_free(&ds_from_file);
|
||||
dynstr_free(&ds_to_file);
|
||||
DBUG_VOID_RETURN;
|
||||
@ -3101,6 +3105,7 @@ void do_move_file(struct st_command *command)
|
||||
|
||||
void do_chmod_file(struct st_command *command)
|
||||
{
|
||||
int error;
|
||||
long mode= 0;
|
||||
static DYNAMIC_STRING ds_mode;
|
||||
static DYNAMIC_STRING ds_file;
|
||||
@ -3121,7 +3126,10 @@ void do_chmod_file(struct st_command *command)
|
||||
die("You must write a 4 digit octal number for mode");
|
||||
|
||||
DBUG_PRINT("info", ("chmod %o %s", (uint)mode, ds_file.str));
|
||||
handle_command_error(command, chmod(ds_file.str, mode));
|
||||
error= 0;
|
||||
if (chmod(ds_file.str, mode))
|
||||
error= 1;
|
||||
handle_command_error(command, error, errno);
|
||||
dynstr_free(&ds_mode);
|
||||
dynstr_free(&ds_file);
|
||||
DBUG_VOID_RETURN;
|
||||
@ -3154,7 +3162,7 @@ void do_file_exist(struct st_command *command)
|
||||
|
||||
DBUG_PRINT("info", ("Checking for existence of file: %s", ds_filename.str));
|
||||
error= (access(ds_filename.str, F_OK) != 0);
|
||||
handle_command_error(command, error);
|
||||
handle_command_error(command, error, errno);
|
||||
dynstr_free(&ds_filename);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
@ -3184,8 +3192,8 @@ void do_mkdir(struct st_command *command)
|
||||
' ');
|
||||
|
||||
DBUG_PRINT("info", ("creating directory: %s", ds_dirname.str));
|
||||
error= my_mkdir(ds_dirname.str, 0777, MYF(0)) != 0;
|
||||
handle_command_error(command, error);
|
||||
error= my_mkdir(ds_dirname.str, 0777, MYF(MY_WME)) != 0;
|
||||
handle_command_error(command, error, my_errno);
|
||||
dynstr_free(&ds_dirname);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
@ -3215,7 +3223,7 @@ void do_rmdir(struct st_command *command)
|
||||
|
||||
DBUG_PRINT("info", ("removing directory: %s", ds_dirname.str));
|
||||
error= rmdir(ds_dirname.str) != 0;
|
||||
handle_command_error(command, error);
|
||||
handle_command_error(command, error, errno);
|
||||
dynstr_free(&ds_dirname);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
@ -3289,7 +3297,7 @@ static void do_list_files(struct st_command *command)
|
||||
sizeof(list_files_args)/sizeof(struct command_arg), ' ');
|
||||
|
||||
error= get_list_files(&ds_res, &ds_dirname, &ds_wild);
|
||||
handle_command_error(command, error);
|
||||
handle_command_error(command, error, my_errno);
|
||||
dynstr_free(&ds_dirname);
|
||||
dynstr_free(&ds_wild);
|
||||
DBUG_VOID_RETURN;
|
||||
@ -3331,7 +3339,7 @@ static void do_list_files_write_file_command(struct st_command *command,
|
||||
|
||||
init_dynamic_string(&ds_content, "", 1024, 1024);
|
||||
error= get_list_files(&ds_content, &ds_dirname, &ds_wild);
|
||||
handle_command_error(command, error);
|
||||
handle_command_error(command, error, my_errno);
|
||||
str_to_file2(ds_filename.str, ds_content.str, ds_content.length, append);
|
||||
dynstr_free(&ds_content);
|
||||
dynstr_free(&ds_filename);
|
||||
@ -3613,7 +3621,7 @@ void do_diff_files(struct st_command *command)
|
||||
|
||||
dynstr_free(&ds_filename);
|
||||
dynstr_free(&ds_filename2);
|
||||
handle_command_error(command, error);
|
||||
handle_command_error(command, error, -1);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
@ -3821,9 +3829,9 @@ void do_perl(struct st_command *command)
|
||||
error= pclose(res_file);
|
||||
|
||||
/* Remove the temporary file */
|
||||
my_delete(temp_file_path, MYF(0));
|
||||
my_delete(temp_file_path, MYF(MY_WME));
|
||||
|
||||
handle_command_error(command, WEXITSTATUS(error));
|
||||
handle_command_error(command, WEXITSTATUS(error), my_errno);
|
||||
}
|
||||
dynstr_free(&ds_delimiter);
|
||||
DBUG_VOID_RETURN;
|
||||
@ -8202,12 +8210,12 @@ int main(int argc, char **argv)
|
||||
command->last_argument= command->end;
|
||||
break;
|
||||
case Q_PING:
|
||||
handle_command_error(command, mysql_ping(&cur_con->mysql));
|
||||
handle_command_error(command, mysql_ping(&cur_con->mysql), -1);
|
||||
break;
|
||||
case Q_SEND_SHUTDOWN:
|
||||
handle_command_error(command,
|
||||
mysql_shutdown(&cur_con->mysql,
|
||||
SHUTDOWN_DEFAULT));
|
||||
SHUTDOWN_DEFAULT), -1);
|
||||
break;
|
||||
case Q_SHUTDOWN_SERVER:
|
||||
do_shutdown_server(command);
|
||||
|
@ -415,6 +415,14 @@ AC_DEFUN([__MYSQL_EMIT_CHECK_PLUGIN],[
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
# Similarly, disable shared plugins when configured with --disable-shared
|
||||
# as libtool will not be able to produce them
|
||||
if test "X[$enable_shared]" = Xno; then
|
||||
if test "X[$mysql_plugin_]$2" != Xyes -a \
|
||||
"X[$with_plugin_]$2" != Xyes; then
|
||||
[with_plugin_]$2=no
|
||||
fi
|
||||
fi
|
||||
])
|
||||
|
||||
|
||||
|
@ -9,8 +9,10 @@
|
||||
--echo Cleaning up after setup_fake_relay_log.inc
|
||||
|
||||
# Remove files.
|
||||
--disable_warnings
|
||||
remove_file $_fake_relay_log;
|
||||
remove_file $_fake_relay_index;
|
||||
--enable_warnings
|
||||
--disable_query_log
|
||||
eval SET @@global.relay_log_purge= $_fake_relay_log_purge;
|
||||
--enable_query_log
|
||||
|
@ -54,11 +54,12 @@
|
||||
|
||||
--echo Comparing tables $diff_table_1 and $diff_table_2
|
||||
disable_query_log;
|
||||
|
||||
disable_warnings;
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/diff_table_1
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/diff_table_2
|
||||
enable_warnings;
|
||||
|
||||
let $_diff_table=$diff_table_2;
|
||||
let $_diff_i=2;
|
||||
|
@ -24,6 +24,7 @@ EOF
|
||||
|
||||
--source include/mysqladmin_shutdown.inc
|
||||
|
||||
--disable_warnings
|
||||
if (!$mel_keep_control_file)
|
||||
{
|
||||
--error 0,1
|
||||
@ -73,6 +74,7 @@ remove_file $MYSQLD_DATADIR/$MARIA_LOG/aria_log.00000020;
|
||||
|
||||
-- error 0,1
|
||||
remove_file $MYSQLD_DATADIR/aria_recovery.trace;
|
||||
--enable_warnings
|
||||
|
||||
append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||
restart-maria_empty_logs.inc
|
||||
|
@ -26,12 +26,16 @@ if ($mms_copy)
|
||||
if ($mms_reverse_copy)
|
||||
{
|
||||
# do not call this without flushing target table first!
|
||||
--disable_warnings
|
||||
--echo * copied $mms_tname$mms_table_to_use back for $mms_purpose
|
||||
-- error 0,1
|
||||
remove_file $MYSQLD_DATADIR/mysqltest/$mms_tname$mms_table_to_use.MAD;
|
||||
--enable_warnings
|
||||
copy_file $MYSQLD_DATADIR/mysqltest_for_$mms_purpose/$mms_tname$mms_table_to_use.MAD $MYSQLD_DATADIR/mysqltest/$mms_tname$mms_table_to_use.MAD;
|
||||
--disable_warnings
|
||||
-- error 0,1
|
||||
remove_file $MYSQLD_DATADIR/mysqltest/$mms_tname$mms_table_to_use.MAI;
|
||||
--enable_warnings
|
||||
copy_file $MYSQLD_DATADIR/mysqltest_for_$mms_purpose/$mms_tname$mms_table_to_use.MAI $MYSQLD_DATADIR/mysqltest/$mms_tname$mms_table_to_use.MAI;
|
||||
}
|
||||
|
||||
|
@ -31,8 +31,10 @@ while ($mms_table_to_use)
|
||||
let $mms_copy=0;
|
||||
|
||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
--disable_warnings
|
||||
-- error 0,1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/mms_for_$mms_purpose.aria_log_control;
|
||||
--enable_warnings
|
||||
copy_file $MYSQLD_DATADIR/$MARIA_LOG/aria_log_control $MYSQLTEST_VARDIR/tmp/mms_for_$mms_purpose.aria_log_control;
|
||||
|
||||
connection default;
|
||||
|
@ -75,7 +75,9 @@ USE hotcopy_test;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--list_files $MYSQLTEST_VARDIR/tmp/hotcopy_test
|
||||
#--exec rm -rf $MYSQLTEST_VARDIR/tmp/hotcopy_test
|
||||
--disable_warnings
|
||||
--remove_files_wildcard $MYSQLTEST_VARDIR/tmp/hotcopy_test *
|
||||
--enable_warnings
|
||||
--rmdir $MYSQLTEST_VARDIR/tmp/hotcopy_test
|
||||
|
||||
# backup without full index files
|
||||
|
@ -18,8 +18,10 @@ CREATE TABLE helper1(c1 VARCHAR(20));
|
||||
# dump raw data to file
|
||||
let $ndb_backup_file1= $MYSQLTEST_VARDIR/ndb_backup_tmp.dat;
|
||||
let $ndb_backup_file2= $MYSQLTEST_VARDIR/tmp.dat;
|
||||
--disable_warnings
|
||||
--error 0,1
|
||||
--remove_file $ndb_backup_file1
|
||||
--enable_warnings
|
||||
--exec $NDB_TOOLS_DIR/ndb_select_all --ndb-connectstring="$NDB_CONNECTSTRING" -d sys --delimiter=',' SYSTAB_0 > $ndb_backup_file1
|
||||
# load the table from the raw data file
|
||||
eval LOAD DATA INFILE '$ndb_backup_file1' INTO TABLE helper1;
|
||||
|
@ -1,7 +1,9 @@
|
||||
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults $ndb_restore_opts -b $the_backup_id -n 1 $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id $ndb_restore_filter > $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults $ndb_restore_opts -b $the_backup_id -n 2 $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id $ndb_restore_filter >> $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--exec sort $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--disable_warnings
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--enable_warnings
|
||||
--let ndb_restore_opts=
|
||||
--let ndb_restore_filter=
|
||||
|
@ -4032,7 +4032,7 @@ sub run_testcase ($$) {
|
||||
sub _preserve_error_log_names {
|
||||
my ($mysqld)= @_;
|
||||
my $error_log_file= $mysqld->if_exist('#log-error');
|
||||
return unless $error_log_file and -r $error_log_file;
|
||||
return (undef, undef) unless $error_log_file;
|
||||
my $error_log_dir= dirname($error_log_file);
|
||||
my $save_name= $error_log_dir ."/../". $mysqld->name() .".error.log";
|
||||
return ($error_log_file, $save_name);
|
||||
|
6
mysql-test/r/alter_table_trans.result
Normal file
6
mysql-test/r/alter_table_trans.result
Normal file
@ -0,0 +1,6 @@
|
||||
drop table if exists t1,t2;
|
||||
CREATE TABLE t1 (a INT, INDEX(a)) engine=innodb;
|
||||
ALTER TABLE t1 RENAME TO t2, DISABLE KEYS;
|
||||
Warnings:
|
||||
Note 1031 Table storage engine for 't1' doesn't have this option
|
||||
DROP TABLE t2;
|
@ -232,7 +232,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00 Using join buffer
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b` from `test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t7`.`b` = `test`.`t8`.`b`) and (`test`.`t6`.`b` < 10))) where 1
|
||||
Note 1003 select `test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b` from `test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and (`test`.`t8`.`b` = `test`.`t7`.`b`))) where 1
|
||||
SELECT t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||
FROM (t6, t7)
|
||||
LEFT JOIN
|
||||
@ -553,7 +553,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) where ((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) where ((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)))
|
||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||
FROM t0,t1
|
||||
@ -649,7 +649,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
SELECT t9.a,t9.b
|
||||
FROM t9;
|
||||
a b
|
||||
@ -840,7 +840,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t1` join `test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) where (`test`.`t1`.`a` <= 2)
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t1` join `test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) where (`test`.`t1`.`a` <= 2)
|
||||
CREATE INDEX idx_b ON t2(b);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||
@ -854,7 +854,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ref idx_b idx_b 5 test.t3.b 2 100.00
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t3` join `test`.`t4` left join (`test`.`t1` join `test`.`t2`) on(((`test`.`t3`.`a` = 1) and (`test`.`t3`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`b` = `test`.`t4`.`b`))) where 1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t3` join `test`.`t4` left join (`test`.`t1` join `test`.`t2`) on(((`test`.`t3`.`a` = 1) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) and (`test`.`t2`.`b` = `test`.`t3`.`b`)))) where 1
|
||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||
FROM (t3,t4)
|
||||
LEFT JOIN
|
||||
@ -916,7 +916,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
CREATE INDEX idx_b ON t4(b);
|
||||
CREATE INDEX idx_b ON t5(b);
|
||||
EXPLAIN EXTENDED
|
||||
@ -966,7 +966,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
CREATE INDEX idx_b ON t8(b);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||
@ -1015,7 +1015,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t8 ref idx_b idx_b 5 test.t5.b 2 100.00 Using where
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
CREATE INDEX idx_b ON t1(b);
|
||||
CREATE INDEX idx_a ON t0(a);
|
||||
EXPLAIN EXTENDED
|
||||
@ -1065,7 +1065,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t8 ref idx_b idx_b 5 test.t5.b 2 100.00 Using where
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b,t9.a,t9.b
|
||||
FROM t0,t1
|
||||
@ -1463,9 +1463,9 @@ join t5 on t5.a=t3.b) on t3.a=t2.b;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL X
|
||||
1 SIMPLE t3 ref a a 5 test.t2.b X
|
||||
1 SIMPLE t4 ref a a 5 test.t3.b X
|
||||
1 SIMPLE t6 ref a a 5 test.t4.b X
|
||||
1 SIMPLE t5 ref a a 5 test.t3.b X
|
||||
1 SIMPLE t4 ref a a 5 test.t5.a X
|
||||
1 SIMPLE t6 ref a a 5 test.t4.b X
|
||||
drop table t0, t1, t2, t3, t4, t5, t6, t7;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
@ -1479,7 +1479,7 @@ on (t1.a = t2.a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 10
|
||||
1 SIMPLE t2 ref a a 5 test.t1.a 1
|
||||
1 SIMPLE t3 ref a a 5 test.t2.a 1
|
||||
1 SIMPLE t3 ref a a 5 test.t1.a 1
|
||||
drop table t1, t2, t3;
|
||||
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, type varchar(10));
|
||||
CREATE TABLE t2 (pid int NOT NULL PRIMARY KEY, type varchar(10));
|
||||
@ -1743,4 +1743,62 @@ ON t4.carrier = t1.carrier;
|
||||
COUNT(*)
|
||||
6
|
||||
DROP TABLE t1,t2,t3,t4,t5;
|
||||
CREATE TABLE t1 (
|
||||
pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
a int DEFAULT NULL,
|
||||
KEY idx(a)
|
||||
);
|
||||
CREATE TABLE t2 (
|
||||
pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
a int DEFAULT NULL,
|
||||
KEY idx(a)
|
||||
);
|
||||
CREATE TABLE t3 (
|
||||
pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
a int DEFAULT NULL,
|
||||
KEY idx(a)
|
||||
);
|
||||
INSERT INTO t1 VALUES
|
||||
(1,2), (2,7), (3,5), (4,7), (5,5), (6,NULL), (7,NULL), (8,9);
|
||||
INSERT INTO t2 VALUES
|
||||
(1,NULL), (4,2), (5,2), (3,4), (2,8);
|
||||
INSERT INTO t3 VALUES
|
||||
(1,9), (2,2), (3,5), (4,2), (5,7), (6,0), (7,5);
|
||||
SELECT t1.pk, t1.a, t2.pk, t2.a,t3.pk, t3.a
|
||||
FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t3.a=t2.a) ON t2.a=t1.a;
|
||||
pk a pk a pk a
|
||||
1 2 4 2 2 2
|
||||
1 2 4 2 4 2
|
||||
1 2 5 2 2 2
|
||||
1 2 5 2 4 2
|
||||
2 7 NULL NULL NULL NULL
|
||||
3 5 NULL NULL NULL NULL
|
||||
4 7 NULL NULL NULL NULL
|
||||
5 5 NULL NULL NULL NULL
|
||||
6 NULL NULL NULL NULL NULL
|
||||
7 NULL NULL NULL NULL NULL
|
||||
8 9 NULL NULL NULL NULL
|
||||
SELECT t1.pk, t1.a, t2.pk, t2.a,t3.pk, t3.a
|
||||
FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t3.a=t2.a) ON t2.a=t1.a
|
||||
WHERE t2.pk IS NULL;
|
||||
pk a pk a pk a
|
||||
2 7 NULL NULL NULL NULL
|
||||
3 5 NULL NULL NULL NULL
|
||||
4 7 NULL NULL NULL NULL
|
||||
5 5 NULL NULL NULL NULL
|
||||
6 NULL NULL NULL NULL NULL
|
||||
7 NULL NULL NULL NULL NULL
|
||||
8 9 NULL NULL NULL NULL
|
||||
SELECT t1.pk, t1.a, t2.pk, t2.a,t3.pk, t3.a
|
||||
FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t3.a=t2.a) ON t2.a=t1.a
|
||||
WHERE t3.pk IS NULL;
|
||||
pk a pk a pk a
|
||||
2 7 NULL NULL NULL NULL
|
||||
3 5 NULL NULL NULL NULL
|
||||
4 7 NULL NULL NULL NULL
|
||||
5 5 NULL NULL NULL NULL
|
||||
6 NULL NULL NULL NULL NULL
|
||||
7 NULL NULL NULL NULL NULL
|
||||
8 9 NULL NULL NULL NULL
|
||||
DROP TABLE t1, t2, t3;
|
||||
End of 5.0 tests
|
||||
|
@ -1397,4 +1397,18 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
Warnings:
|
||||
Note 1003 select straight_join `test`.`jt1`.`f1` AS `f1` from `test`.`t1` `jt6` left join (`test`.`t1` `jt3` join `test`.`t1` `jt4` left join `test`.`t1` `jt5` on(1) left join `test`.`t1` `jt2` on(1)) on((`test`.`jt6`.`f1` and 1)) left join `test`.`t1` `jt1` on(1) where 1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#49600: outer join of two single-row tables with joining attributes
|
||||
# evaluated to nulls
|
||||
create table t1 (a int, b int);
|
||||
create table t2 (a int, b int);
|
||||
insert into t1 values (1, NULL);
|
||||
insert into t2 values (2, NULL);
|
||||
select * from t1 left join t2 on t1.b=t2.b;
|
||||
a b a b
|
||||
1 NULL NULL NULL
|
||||
select * from t1 left join t2 on t1.b=t2.b where 1=1;
|
||||
a b a b
|
||||
1 NULL NULL NULL
|
||||
drop table t1,t2;
|
||||
End of 5.1 tests
|
||||
|
@ -60,7 +60,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t0 ALL NULL NULL NULL NULL 4 100.00
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a` from `test`.`t0` left join (`test`.`t1`) on((`test`.`t0`.`a` = `test`.`t1`.`a`)) where 1
|
||||
Note 1003 select `test`.`t0`.`a` AS `a` from `test`.`t0` left join (`test`.`t1`) on((`test`.`t1`.`a` = `test`.`t0`.`a`)) where 1
|
||||
# Elimination with aggregate functions
|
||||
explain select count(*) from t1 left join t2 on t2.a=t1.a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
|
@ -1418,7 +1418,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join `test`.`t2` on((`test`.`t1`.`a` = `test`.`t2`.`a`))) on((`test`.`t3`.`a` = `test`.`t1`.`a`)) where 1
|
||||
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join `test`.`t2` on(((`test`.`t1`.`a` = `test`.`t3`.`a`) and (`test`.`t2`.`a` = `test`.`t3`.`a`)))) on((`test`.`t1`.`a` = `test`.`t3`.`a`)) where 1
|
||||
create view v1 (a) as select a from t1;
|
||||
create view v2 (a) as select a from t2;
|
||||
create view v4 (a,b) as select v1.a as a, v2.a as b from v1 left join v2 on (v1.a=v2.a);
|
||||
@ -1433,7 +1433,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join (`test`.`t2`) on((`test`.`t1`.`a` = `test`.`t2`.`a`))) on((`test`.`t3`.`a` = `test`.`t1`.`a`)) where 1
|
||||
Note 1003 select `test`.`t3`.`a` AS `a`,`test`.`t1`.`a` AS `a`,`test`.`t2`.`a` AS `b` from `test`.`t3` left join (`test`.`t1` left join (`test`.`t2`) on(((`test`.`t1`.`a` = `test`.`t3`.`a`) and (`test`.`t2`.`a` = `test`.`t3`.`a`)))) on((`test`.`t1`.`a` = `test`.`t3`.`a`)) where 1
|
||||
prepare stmt1 from "select * from t3 left join v4 on (t3.a = v4.a);";
|
||||
execute stmt1;
|
||||
a a b
|
||||
|
@ -232,7 +232,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00 Using join buffer
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b` from `test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t7`.`b` = `test`.`t8`.`b`) and (`test`.`t6`.`b` < 10))) where 1
|
||||
Note 1003 select `test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b` from `test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and (`test`.`t8`.`b` = `test`.`t7`.`b`))) where 1
|
||||
SELECT t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||
FROM (t6, t7)
|
||||
LEFT JOIN
|
||||
@ -553,7 +553,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 100.00
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) where ((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) where ((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)))
|
||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||
t5.a,t5.b,t6.a,t6.b,t7.a,t7.b,t8.a,t8.b
|
||||
FROM t0,t1
|
||||
@ -649,7 +649,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
SELECT t9.a,t9.b
|
||||
FROM t9;
|
||||
a b
|
||||
@ -840,7 +840,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 100.00
|
||||
1 SIMPLE t4 ALL NULL NULL NULL NULL 2 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t1` join `test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) where (`test`.`t1`.`a` <= 2)
|
||||
Note 1003 select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t1` join `test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) where (`test`.`t1`.`a` <= 2)
|
||||
CREATE INDEX idx_b ON t2(b);
|
||||
EXPLAIN EXTENDED
|
||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||
@ -854,7 +854,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t2 ref idx_b idx_b 5 test.t3.b 1 100.00
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 3 100.00
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t3` join `test`.`t4` left join (`test`.`t1` join `test`.`t2`) on(((`test`.`t3`.`a` = 1) and (`test`.`t3`.`b` = `test`.`t2`.`b`) and (`test`.`t2`.`b` = `test`.`t4`.`b`))) where 1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b` from `test`.`t3` join `test`.`t4` left join (`test`.`t1` join `test`.`t2`) on(((`test`.`t3`.`a` = 1) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) and (`test`.`t2`.`b` = `test`.`t3`.`b`)))) where 1
|
||||
SELECT t2.a,t2.b,t3.a,t3.b,t4.a,t4.b
|
||||
FROM (t3,t4)
|
||||
LEFT JOIN
|
||||
@ -916,7 +916,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t4`.`b` = `test`.`t3`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
CREATE INDEX idx_b ON t4(b);
|
||||
CREATE INDEX idx_b ON t5(b);
|
||||
EXPLAIN EXTENDED
|
||||
@ -966,7 +966,7 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 100.00 Using where
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3 100.00 Using where; Using join buffer
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t4`.`b` = `test`.`t2`.`b`) and (`test`.`t3`.`a` = 1))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t8`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` < 10)))) on(((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t6`.`b` >= 2)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and ((`test`.`t5`.`b` = `test`.`t0`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t3`.`b` = `test`.`t4`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
Note 1003 select `test`.`t0`.`a` AS `a`,`test`.`t0`.`b` AS `b`,`test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t3`.`a` AS `a`,`test`.`t3`.`b` AS `b`,`test`.`t4`.`a` AS `a`,`test`.`t4`.`b` AS `b`,`test`.`t5`.`a` AS `a`,`test`.`t5`.`b` AS `b`,`test`.`t6`.`a` AS `a`,`test`.`t6`.`b` AS `b`,`test`.`t7`.`a` AS `a`,`test`.`t7`.`b` AS `b`,`test`.`t8`.`a` AS `a`,`test`.`t8`.`b` AS `b`,`test`.`t9`.`a` AS `a`,`test`.`t9`.`b` AS `b` from `test`.`t0` join `test`.`t1` left join (`test`.`t2` left join (`test`.`t3` join `test`.`t4`) on(((`test`.`t3`.`a` = 1) and (`test`.`t4`.`b` = `test`.`t2`.`b`))) join `test`.`t5` left join (`test`.`t6` join `test`.`t7` left join `test`.`t8` on(((`test`.`t6`.`b` < 10) and ((`test`.`t7`.`b` = `test`.`t5`.`b`) and (`test`.`t8`.`b` = `test`.`t5`.`b`))))) on(((`test`.`t6`.`b` >= 2) and (`test`.`t7`.`b` = `test`.`t5`.`b`)))) on((((`test`.`t3`.`b` = 2) or isnull(`test`.`t3`.`c`)) and ((`test`.`t6`.`b` = 2) or isnull(`test`.`t6`.`c`)) and (((`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t5`.`b` = `test`.`t0`.`b`)) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t6`.`c`) or isnull(`test`.`t8`.`c`)) and (`test`.`t1`.`a` <> 2))) join `test`.`t9` where ((`test`.`t9`.`a` = 1) and (`test`.`t1`.`b` = `test`.`t0`.`b`) and (`test`.`t0`.`a` = 1) and ((`test`.`t2`.`a` >= 4) or isnull(`test`.`t2`.`c`)) and ((`test`.`t3`.`a` < 5) or isnull(`test`.`t3`.`c`)) and ((`test`.`t3`.`b` = `test`.`t4`.`b`) or isnull(`test`.`t3`.`c`) or isnull(`test`.`t4`.`c`)) and ((`test`.`t5`.`a` >= 2) or isnull(`test`.`t5`.`c`)) and ((`test`.`t6`.`a` >= 4) or isnull(`test`.`t6`.`c`)) and ((`test`.`t7`.`a` <= 2) or isnull(`test`.`t7`.`c`)) and ((`test`.`t8`.`a` < 1) or isnull(`test`.`t8`.`c`)) and ((`test`.`t9`.`b` = `test`.`t8`.`b`) or isnull(`test`.`t8`.`c`)))
|
||||
CREATE INDEX idx_b ON t8(b);
|
||||
EXPLAIN
|
||||
SELECT t0.a,t0.b,t1.a,t1.b,t2.a,t2.b,t3.a,t3.b,t4.a,t4.b,
|
||||
@ -1487,7 +1487,7 @@ on (t1.a = t2.a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 10
|
||||
1 SIMPLE t2 ref a a 5 test.t1.a 1
|
||||
1 SIMPLE t3 ref a a 5 test.t2.a 1
|
||||
1 SIMPLE t3 ref a a 5 test.t1.a 1
|
||||
drop table t1, t2, t3;
|
||||
CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, type varchar(10));
|
||||
CREATE TABLE t2 (pid int NOT NULL PRIMARY KEY, type varchar(10));
|
||||
|
15
mysql-test/t/alter_table_trans.test
Normal file
15
mysql-test/t/alter_table_trans.test
Normal file
@ -0,0 +1,15 @@
|
||||
#
|
||||
# Test of alter table with transactional tables
|
||||
#
|
||||
|
||||
--source include/have_innodb.inc
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# This test caused a crash in wait_if_global_read_lock()
|
||||
#
|
||||
CREATE TABLE t1 (a INT, INDEX(a)) engine=innodb;
|
||||
ALTER TABLE t1 RENAME TO t2, DISABLE KEYS;
|
||||
DROP TABLE t2;
|
@ -1196,5 +1196,45 @@ SELECT COUNT(*)
|
||||
|
||||
DROP TABLE t1,t2,t3,t4,t5;
|
||||
|
||||
#
|
||||
# BUG#49322: Nested left joins + not-exist optimization
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
a int DEFAULT NULL,
|
||||
KEY idx(a)
|
||||
);
|
||||
CREATE TABLE t2 (
|
||||
pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
a int DEFAULT NULL,
|
||||
KEY idx(a)
|
||||
);
|
||||
CREATE TABLE t3 (
|
||||
pk int NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
a int DEFAULT NULL,
|
||||
KEY idx(a)
|
||||
);
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1,2), (2,7), (3,5), (4,7), (5,5), (6,NULL), (7,NULL), (8,9);
|
||||
INSERT INTO t2 VALUES
|
||||
(1,NULL), (4,2), (5,2), (3,4), (2,8);
|
||||
INSERT INTO t3 VALUES
|
||||
(1,9), (2,2), (3,5), (4,2), (5,7), (6,0), (7,5);
|
||||
|
||||
SELECT t1.pk, t1.a, t2.pk, t2.a,t3.pk, t3.a
|
||||
FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t3.a=t2.a) ON t2.a=t1.a;
|
||||
|
||||
SELECT t1.pk, t1.a, t2.pk, t2.a,t3.pk, t3.a
|
||||
FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t3.a=t2.a) ON t2.a=t1.a
|
||||
WHERE t2.pk IS NULL;
|
||||
|
||||
SELECT t1.pk, t1.a, t2.pk, t2.a,t3.pk, t3.a
|
||||
FROM t1 LEFT JOIN (t2 LEFT JOIN t3 ON t3.a=t2.a) ON t2.a=t1.a
|
||||
WHERE t3.pk IS NULL;
|
||||
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
@ -981,4 +981,19 @@ EXPLAIN EXTENDED SELECT STRAIGHT_JOIN jt1.f1 FROM t1 AS jt1
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug#49600: outer join of two single-row tables with joining attributes
|
||||
--echo # evaluated to nulls
|
||||
|
||||
create table t1 (a int, b int);
|
||||
create table t2 (a int, b int);
|
||||
insert into t1 values (1, NULL);
|
||||
insert into t2 values (2, NULL);
|
||||
|
||||
select * from t1 left join t2 on t1.b=t2.b;
|
||||
|
||||
select * from t1 left join t2 on t1.b=t2.b where 1=1;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -106,7 +106,7 @@ select otto from (select 1 as otto) as t1;
|
||||
# expecting a SQL-state for a command that can't give one should fail
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--error 1
|
||||
--exec echo "error S00000; remove_file $MYSQLTEST_VARDIR/tmp/test_nonexistent.tmp;" | $MYSQL_TEST 2>&1
|
||||
--exec echo "disable_warnings ; error S00000; remove_file $MYSQLTEST_VARDIR/tmp/test_nonexistent.tmp;" | $MYSQL_TEST 2>&1
|
||||
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
@ -1551,12 +1551,14 @@ select "this will be executed";
|
||||
--exec $MYSQL_TEST -x $MYSQLTEST_VARDIR/tmp/query.sql -R $MYSQLTEST_VARDIR/tmp/zero_length_file.result > /dev/null 2>&1
|
||||
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.result;
|
||||
--disable_warnings
|
||||
--error 0,1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.reject;
|
||||
--error 0,1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/zero_length_file.log;
|
||||
--error 0,1
|
||||
remove_file $MYSQL_TEST_DIR/r/zero_length_file.reject;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Test that a test file that does not generate any output fails.
|
||||
@ -1741,11 +1743,13 @@ drop table t1;
|
||||
# test for remove_file
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
--disable_warnings
|
||||
--error 1
|
||||
--exec echo "remove_file ;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--error 1
|
||||
remove_file non_existing_file;
|
||||
--enable_warnings
|
||||
|
||||
# ----------------------------------------------------------------------------
|
||||
# test for remove_files_wildcard
|
||||
@ -1785,7 +1789,7 @@ Content for test_file1 contains EOF
|
||||
END_DELIMITER
|
||||
file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
|
||||
|
||||
# write to already exisiting file
|
||||
# write to already existing file
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--error 1
|
||||
--exec echo "write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;" | $MYSQL_TEST 2>&1
|
||||
@ -1901,8 +1905,10 @@ EOF
|
||||
--error 1
|
||||
--exec echo "file_exists ;" | $MYSQL_TEST 2>&1
|
||||
|
||||
--disable_warnings
|
||||
--error 0,1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
|
||||
--enable_warnings
|
||||
--error 1
|
||||
file_exists $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
|
||||
write_file $MYSQLTEST_VARDIR/tmp/test_file1.tmp;
|
||||
@ -1939,6 +1945,7 @@ remove_file $MYSQLTEST_VARDIR/tmp/file2.tmp;
|
||||
|
||||
# - Check that if source file does not exist, nothing will be created.
|
||||
|
||||
--disable_warnings
|
||||
--error 1
|
||||
file_exists $MYSQLTEST_VARDIR/tmp/file1.tmp;
|
||||
--error 1
|
||||
@ -1949,6 +1956,7 @@ move_file $MYSQLTEST_VARDIR/tmp/file1.tmp $MYSQLTEST_VARDIR/tmp/file2.tmp;
|
||||
file_exists $MYSQLTEST_VARDIR/tmp/file1.tmp;
|
||||
--error 1
|
||||
file_exists $MYSQLTEST_VARDIR/tmp/file2.tmp;
|
||||
--enable_warnings
|
||||
|
||||
# - Check that if source file exists, everything works properly.
|
||||
|
||||
|
@ -112,7 +112,7 @@ int my_copy(const char *from, const char *to, myf MyFlags)
|
||||
{
|
||||
my_errno= errno;
|
||||
if (MyFlags & MY_WME)
|
||||
my_error(EE_CHANGE_PERMISSIONS, MYF(ME_BELL+ME_WAITTANG), from, errno);
|
||||
my_error(EE_CHANGE_PERMISSIONS, MYF(ME_BELL+ME_WAITTANG), to, errno);
|
||||
if (MyFlags & MY_FAE)
|
||||
goto err;
|
||||
}
|
||||
|
@ -5521,7 +5521,7 @@ longlong Item_equal::val_int()
|
||||
return 0;
|
||||
List_iterator_fast<Item_field> it(fields);
|
||||
Item *item= const_item ? const_item : it++;
|
||||
if ((null_value= item->null_value))
|
||||
if ((null_value= item->is_null()))
|
||||
return 0;
|
||||
eval_item->store_value(item);
|
||||
while ((item_field= it++))
|
||||
@ -5529,7 +5529,7 @@ longlong Item_equal::val_int()
|
||||
/* Skip fields of non-const tables. They haven't been read yet */
|
||||
if (item_field->field->table->const_table)
|
||||
{
|
||||
if ((null_value= item_field->null_value) || eval_item->cmp(item_field))
|
||||
if ((null_value= item_field->is_null()) || eval_item->cmp(item_field))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -3040,7 +3040,7 @@ public:
|
||||
ulonglong max_in_memory_size)
|
||||
{
|
||||
register ulonglong max_elems_in_tree=
|
||||
(1 + max_in_memory_size / ALIGN_SIZE(sizeof(TREE_ELEMENT)+key_size));
|
||||
max_in_memory_size / ALIGN_SIZE(sizeof(TREE_ELEMENT)+key_size);
|
||||
return (int) (sizeof(uint)*(1 + nkeys/max_elems_in_tree));
|
||||
}
|
||||
|
||||
|
@ -9313,7 +9313,10 @@ optimize_cond(JOIN *join, COND *conds, List<TABLE_LIST> *join_list,
|
||||
DBUG_ENTER("optimize_cond");
|
||||
|
||||
if (!conds)
|
||||
{
|
||||
*cond_value= Item::COND_TRUE;
|
||||
build_equal_items(join->thd, NULL, NULL, join_list, &join->cond_equal);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
@ -11746,6 +11749,7 @@ evaluate_join_record(JOIN *join, JOIN_TAB *join_tab,
|
||||
condition is true => a match is found.
|
||||
*/
|
||||
bool found= 1;
|
||||
bool use_not_exists_opt= 0;
|
||||
while (join_tab->first_unmatched && found)
|
||||
{
|
||||
/*
|
||||
@ -11762,7 +11766,7 @@ evaluate_join_record(JOIN *join, JOIN_TAB *join_tab,
|
||||
for (JOIN_TAB *tab= first_unmatched; tab <= join_tab; tab++)
|
||||
{
|
||||
if (tab->table->reginfo.not_exists_optimize)
|
||||
return NESTED_LOOP_NO_MORE_ROWS;
|
||||
use_not_exists_opt= 1;
|
||||
/* Check all predicates that has just been activated. */
|
||||
/*
|
||||
Actually all predicates non-guarded by first_unmatched->found
|
||||
@ -11795,6 +11799,9 @@ evaluate_join_record(JOIN *join, JOIN_TAB *join_tab,
|
||||
join_tab->first_unmatched= first_unmatched;
|
||||
}
|
||||
|
||||
if (use_not_exists_opt)
|
||||
return NESTED_LOOP_NO_MORE_ROWS;
|
||||
|
||||
/*
|
||||
It was not just a return to lower loop level when one
|
||||
of the newly activated predicates is evaluated as false
|
||||
|
@ -6976,8 +6976,14 @@ view_err:
|
||||
Workaround InnoDB ending the transaction when the table instance
|
||||
is unlocked/closed (close_cached_table below), otherwise the trx
|
||||
state will differ between the server and storage engine layers.
|
||||
|
||||
We have to unlock LOCK_open here as otherwise we can get deadlock
|
||||
in wait_if_global_readlock(). This is still safe as we have a
|
||||
name lock on the table object.
|
||||
*/
|
||||
VOID(pthread_mutex_unlock(&LOCK_open));
|
||||
ha_autocommit_or_rollback(thd, 0);
|
||||
VOID(pthread_mutex_lock(&LOCK_open));
|
||||
|
||||
/*
|
||||
Then do a 'simple' rename of the table. First we need to close all
|
||||
|
@ -2044,14 +2044,16 @@ bool ha_maria::check_and_repair(THD *thd)
|
||||
|
||||
check_opt.init();
|
||||
|
||||
if (file->s->state.changed & STATE_MOVED)
|
||||
error= 1;
|
||||
if ((file->s->state.changed &
|
||||
(STATE_CRASHED | STATE_CRASHED_ON_REPAIR | STATE_MOVED)) ==
|
||||
STATE_MOVED)
|
||||
{
|
||||
sql_print_information("Zerofilling table: '%s'", table->s->path.str);
|
||||
sql_print_information("Zerofilling moved table: '%s'",
|
||||
table->s->path.str);
|
||||
if (!(error= zerofill(thd, &check_opt)))
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
else
|
||||
error= 1;
|
||||
|
||||
/*
|
||||
if we got this far - the table is crashed.
|
||||
|
@ -742,8 +742,8 @@ static my_bool enough_free_entries(uchar *buff, uint block_size,
|
||||
@return 1 There is room for more entries on the page
|
||||
*/
|
||||
|
||||
static my_bool enough_free_entries_on_page(MARIA_SHARE *share,
|
||||
uchar *page_buff)
|
||||
my_bool enough_free_entries_on_page(MARIA_SHARE *share,
|
||||
uchar *page_buff)
|
||||
{
|
||||
enum en_page_type page_type;
|
||||
page_type= (enum en_page_type) (page_buff[PAGE_TYPE_OFFSET] &
|
||||
|
@ -176,6 +176,7 @@ my_bool _ma_compare_block_record(register MARIA_HA *info,
|
||||
void _ma_compact_block_page(uchar *buff, uint block_size, uint rownr,
|
||||
my_bool extend_block, TrID min_read_from,
|
||||
uint min_row_length);
|
||||
my_bool enough_free_entries_on_page(MARIA_SHARE *share, uchar *page_buff);
|
||||
TRANSLOG_ADDRESS
|
||||
maria_page_get_lsn(uchar *page, pgcache_page_no_t page_no, uchar* data_ptr);
|
||||
|
||||
|
@ -3376,7 +3376,7 @@ static my_bool maria_zerofill_data(HA_CHECK *param, MARIA_HA *info,
|
||||
case TAIL_PAGE:
|
||||
{
|
||||
uint max_entry= (uint) buff[DIR_COUNT_OFFSET];
|
||||
uint offset, dir_start;
|
||||
uint offset, dir_start, empty_space;
|
||||
uchar *dir;
|
||||
|
||||
if (zero_lsn)
|
||||
@ -3389,9 +3389,13 @@ static my_bool maria_zerofill_data(HA_CHECK *param, MARIA_HA *info,
|
||||
is_head_page ? ~(TrID) 0 : 0,
|
||||
is_head_page ?
|
||||
share->base.min_block_length : 0);
|
||||
|
||||
/* compactation may have increased free space */
|
||||
empty_space= uint2korr(buff + EMPTY_SPACE_OFFSET);
|
||||
if (!enough_free_entries_on_page(share, buff))
|
||||
empty_space= 0; /* Page is full */
|
||||
if (_ma_bitmap_set(info, page, is_head_page,
|
||||
uint2korr(buff + EMPTY_SPACE_OFFSET)))
|
||||
empty_space))
|
||||
goto err;
|
||||
|
||||
/* Zerofill the not used part */
|
||||
|
@ -434,8 +434,14 @@ MARIA_HA *maria_open(const char *name, int mode, uint open_flags)
|
||||
share->base.born_transactional &&
|
||||
((!(open_flags & HA_OPEN_IGNORE_MOVED_STATE) &&
|
||||
memcmp(share->base.uuid, maria_uuid, MY_UUID_SIZE)) ||
|
||||
share->state.create_trid > trnman_get_max_trid()))
|
||||
(share->state.create_trid > trnman_get_max_trid() &&
|
||||
!maria_in_recovery)))
|
||||
{
|
||||
DBUG_PRINT("warning", ("table is moved from another system. uuid_diff: %d create_trid: %lu max_trid: %lu",
|
||||
memcmp(share->base.uuid, maria_uuid,
|
||||
MY_UUID_SIZE) != 0,
|
||||
(ulong) share->state.create_trid,
|
||||
(ulong) trnman_get_max_trid()));
|
||||
if (open_flags & HA_OPEN_FOR_REPAIR)
|
||||
share->state.changed|= STATE_MOVED;
|
||||
else
|
||||
|
@ -554,6 +554,11 @@ static int display_and_apply_record(const LOG_DESC *log_desc,
|
||||
DBUG_ASSERT("one more hook to write" == 0);
|
||||
return 1;
|
||||
}
|
||||
if (rec->type == LOGREC_DEBUG_INFO)
|
||||
{
|
||||
/* Query already printed by display_record_position() */
|
||||
return 0;
|
||||
}
|
||||
if ((error= (*log_desc->record_execute_in_redo_phase)(rec)))
|
||||
eprint(tracef, "Got error %d when executing record %s",
|
||||
my_errno, log_desc->name);
|
||||
@ -692,6 +697,45 @@ prototype_redo_exec_hook(INCOMPLETE_LOG)
|
||||
}
|
||||
|
||||
|
||||
static my_bool create_database_if_not_exists(const char *name)
|
||||
{
|
||||
char dirname[FN_REFLEN];
|
||||
size_t length;
|
||||
MY_STAT stat_info;
|
||||
DBUG_ENTER("create_database_if_not_exists");
|
||||
|
||||
dirname_part(dirname, name, &length);
|
||||
if (!length)
|
||||
{
|
||||
/* Skip files without directores */
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
/*
|
||||
Safety; Don't create files with hard path;
|
||||
Should never happen with MariaDB
|
||||
If hard path, then error will be detected when trying to create index file
|
||||
*/
|
||||
if (test_if_hard_path(dirname))
|
||||
DBUG_RETURN(0);
|
||||
|
||||
if (my_stat(dirname,&stat_info,MYF(0)))
|
||||
DBUG_RETURN(0);
|
||||
|
||||
|
||||
tprint(tracef, "Creating not existing database '%s'\n", dirname);
|
||||
if (my_mkdir(dirname, 0777, MYF(MY_WME)))
|
||||
{
|
||||
eprint(tracef, "***WARNING: Can't create not existing database '%s'",
|
||||
dirname);
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
prototype_redo_exec_hook(REDO_CREATE_TABLE)
|
||||
{
|
||||
File dfile= -1, kfile= -1;
|
||||
@ -703,11 +747,12 @@ prototype_redo_exec_hook(REDO_CREATE_TABLE)
|
||||
int error= 1, create_mode= O_RDWR | O_TRUNC, i;
|
||||
MARIA_HA *info= NULL;
|
||||
uint kfile_size_before_extension, keystart;
|
||||
DBUG_ENTER("exec_REDO_LOGREC_REDO_CREATE_TABLE");
|
||||
|
||||
if (skip_DDLs)
|
||||
{
|
||||
tprint(tracef, "we skip DDLs\n");
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
enlarge_buffer(rec);
|
||||
if (log_record_buffer.str == NULL ||
|
||||
@ -810,6 +855,8 @@ prototype_redo_exec_hook(REDO_CREATE_TABLE)
|
||||
name);
|
||||
goto end;
|
||||
}
|
||||
if (create_database_if_not_exists(name))
|
||||
goto end;
|
||||
fn_format(filename, name, "", MARIA_NAME_IEXT,
|
||||
(MY_UNPACK_FILENAME |
|
||||
(flags & HA_DONT_TOUCH_DATA) ? MY_RETURN_REAL_PATH : 0) |
|
||||
@ -863,7 +910,7 @@ end:
|
||||
error|= my_close(kfile, MYF(MY_WME));
|
||||
if (info != NULL)
|
||||
error|= maria_close(info);
|
||||
return error;
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
|
||||
@ -872,10 +919,12 @@ prototype_redo_exec_hook(REDO_RENAME_TABLE)
|
||||
char *old_name, *new_name;
|
||||
int error= 1;
|
||||
MARIA_HA *info= NULL;
|
||||
DBUG_ENTER("exec_REDO_LOGREC_REDO_RENAME_TABLE");
|
||||
|
||||
if (skip_DDLs)
|
||||
{
|
||||
tprint(tracef, "we skip DDLs\n");
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
enlarge_buffer(rec);
|
||||
if (log_record_buffer.str == NULL ||
|
||||
@ -1050,7 +1099,7 @@ end:
|
||||
tprint(tracef, "\n");
|
||||
if (info != NULL)
|
||||
error|= maria_close(info);
|
||||
return error;
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
|
||||
@ -1252,6 +1301,7 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id)
|
||||
MARIA_HA *info;
|
||||
MARIA_SHARE *share;
|
||||
my_off_t dfile_len, kfile_len;
|
||||
DBUG_ENTER("new_table");
|
||||
|
||||
checkpoint_useful= TRUE;
|
||||
if ((name == NULL) || (name[0] == 0))
|
||||
@ -1288,6 +1338,12 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id)
|
||||
*/
|
||||
if (close_one_table(share->open_file_name.str, lsn_of_file_id))
|
||||
goto end;
|
||||
/*
|
||||
We should not try to get length of data/index files as the files
|
||||
are not on disk yet.
|
||||
*/
|
||||
_ma_tmp_disable_logging_for_table(info, FALSE);
|
||||
goto set_lsn_of_file_id;
|
||||
}
|
||||
if (!share->base.born_transactional)
|
||||
{
|
||||
@ -1356,6 +1412,8 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id)
|
||||
/* Recovery will fix this, no error */
|
||||
ALERT_USER();
|
||||
}
|
||||
|
||||
set_lsn_of_file_id:
|
||||
/*
|
||||
This LSN serves in this situation; assume log is:
|
||||
FILE_ID(6->"t2") REDO_INSERT(6) FILE_ID(6->"t1") CHECKPOINT(6->"t1")
|
||||
@ -1383,7 +1441,7 @@ end:
|
||||
if (error == -1)
|
||||
error= 0;
|
||||
}
|
||||
return error;
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -3321,7 +3379,12 @@ static int close_all_tables(void)
|
||||
state while they were used. As Recovery corrected them, don't alarm the
|
||||
user, don't ask for a table check:
|
||||
*/
|
||||
info->s->state.open_count= 0;
|
||||
if (info->s->state.open_count != 0)
|
||||
{
|
||||
/* let ma_close() mark the table properly closed */
|
||||
info->s->state.open_count= 1;
|
||||
info->s->global_changed= 1;
|
||||
}
|
||||
prepare_table_for_close(info, addr);
|
||||
error|= maria_close(info);
|
||||
pthread_mutex_lock(&THR_LOCK_maria);
|
||||
|
@ -271,10 +271,10 @@ static struct my_option my_long_options[] =
|
||||
&check_param.keys_in_use,
|
||||
0, GET_ULL, REQUIRED_ARG, -1, 0, 0, 0, 0, 0},
|
||||
{"datadir", OPT_DATADIR,
|
||||
"Path for control file (and logs if --log-dir not used).",
|
||||
"Path for control file (and logs if --logdir not used).",
|
||||
&maria_data_root, 0, 0, GET_STR, REQUIRED_ARG,
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"log-dir", OPT_LOG_DIR,
|
||||
{"logdir", OPT_LOG_DIR,
|
||||
"Path for log files.",
|
||||
(char**) &opt_log_dir, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"max-record-length", OPT_MAX_RECORD_LENGTH,
|
||||
@ -320,9 +320,6 @@ static struct my_option my_long_options[] =
|
||||
"Change the collation used by the index",
|
||||
(char**) &set_collation_name, 0, 0, GET_STR, REQUIRED_ARG,
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"set-variable", 'O',
|
||||
"Change the value of a variable. Please note that this option is deprecated; you can set variables directly with --variable-name=value.",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"silent", 's',
|
||||
"Only print errors. One can use two -s to make aria_chk very silent.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
@ -353,7 +350,7 @@ static struct my_option my_long_options[] =
|
||||
"properly closed'",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"unpack", 'u',
|
||||
"Unpack file packed with ariapack.",
|
||||
"Unpack file packed with aria_pack.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"verbose", 'v',
|
||||
"Print more information. This can be used with --description and --check. Use many -v for more verbosity!",
|
||||
@ -372,12 +369,14 @@ static struct my_option my_long_options[] =
|
||||
&check_param.use_buffers, &check_param.use_buffers, 0,
|
||||
GET_ULONG, REQUIRED_ARG, (long) USE_BUFFER_INIT, 1024L*1024L,
|
||||
(long) ~0L, (long) MALLOC_OVERHEAD, (long) IO_SIZE, 0},
|
||||
{ "read_buffer_size", OPT_READ_BUFFER_SIZE, "",
|
||||
{ "read_buffer_size", OPT_READ_BUFFER_SIZE,
|
||||
"Read buffer size for sequential reads during scanning",
|
||||
&check_param.read_buffer_length,
|
||||
&check_param.read_buffer_length, 0, GET_ULONG, REQUIRED_ARG,
|
||||
(long) READ_BUFFER_INIT, (long) MALLOC_OVERHEAD,
|
||||
(long) ~0L, (long) MALLOC_OVERHEAD, (long) 1L, 0},
|
||||
{ "write_buffer_size", OPT_WRITE_BUFFER_SIZE, "",
|
||||
{ "write_buffer_size", OPT_WRITE_BUFFER_SIZE,
|
||||
"Write buffer size for sequential writes during repair of fixed size or dynamic size rows",
|
||||
&check_param.write_buffer_length,
|
||||
&check_param.write_buffer_length, 0, GET_ULONG, REQUIRED_ARG,
|
||||
(long) READ_BUFFER_INIT, (long) MALLOC_OVERHEAD,
|
||||
@ -388,7 +387,8 @@ static struct my_option my_long_options[] =
|
||||
&check_param.sort_buffer_length, 0, GET_ULONG, REQUIRED_ARG,
|
||||
(long) SORT_BUFFER_INIT, (long) (MIN_SORT_BUFFER + MALLOC_OVERHEAD),
|
||||
(long) ~0L, (long) MALLOC_OVERHEAD, (long) 1L, 0},
|
||||
{ "sort_key_blocks", OPT_SORT_KEY_BLOCKS, "",
|
||||
{ "sort_key_blocks", OPT_SORT_KEY_BLOCKS,
|
||||
"Internal buffer for sorting keys; Don't touch :)",
|
||||
&check_param.sort_key_blocks,
|
||||
&check_param.sort_key_blocks, 0, GET_ULONG, REQUIRED_ARG,
|
||||
BUFFERS_WHEN_SORTING, 4L, 100L, 0L, 1L, 0},
|
||||
@ -411,7 +411,7 @@ static struct my_option my_long_options[] =
|
||||
(char**) &maria_stats_method_str, (char**) &maria_stats_method_str, 0,
|
||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{ "zerofill", 'z',
|
||||
"Fill empty space in data and index files with zeroes",
|
||||
"Fill empty space in data and index files with zeroes,",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{ "zerofill-keep-lsn", OPT_ZEROFILL_KEEP_LSN,
|
||||
"Like --zerofill but does not zero out LSN of data/index pages;"
|
||||
@ -447,10 +447,12 @@ static void usage(void)
|
||||
printf("\
|
||||
-H, --HELP Display this help and exit.\n\
|
||||
-?, --help Display this help and exit.\n\
|
||||
-O, --set-variable var=option.\n\
|
||||
Change the value of a variable. Please note that\n\
|
||||
this option is deprecated; you can set variables\n\
|
||||
directly with '--variable-name=value'.\n\
|
||||
--datadir=path Path for control file (and logs if --logdir not used)\n\
|
||||
--logdir=path Path for log files\n\
|
||||
--require-control-file Abort if we can't find/read the maria_log_control\n\
|
||||
file\n\
|
||||
-s, --silent Only print errors. One can use two -s to make\n\
|
||||
maria_chk very silent.\n\
|
||||
-t, --tmpdir=path Path for temporary files. Multiple paths can be\n\
|
||||
specified, separated by ");
|
||||
#if defined( __WIN__) || defined(__NETWARE__)
|
||||
@ -458,12 +460,8 @@ static void usage(void)
|
||||
#else
|
||||
printf("colon (:)");
|
||||
#endif
|
||||
printf(", they will be used\n\
|
||||
printf(", they will be used\n\
|
||||
in a round-robin fashion.\n\
|
||||
--require-control-file Abort if we can't find/read the aria_log_control\n\
|
||||
file\n\
|
||||
-s, --silent Only print errors. One can use two -s to make\n\
|
||||
aria_chk very silent.\n\
|
||||
-v, --verbose Print more information. This can be used with\n\
|
||||
--description and --check. Use many -v for more verbosity.\n\
|
||||
-V, --version Print version and exit.\n\
|
||||
@ -485,10 +483,11 @@ static void usage(void)
|
||||
-i, --information Print statistics information about table that is checked.\n\
|
||||
-m, --medium-check Faster than extend-check, but only finds 99.99% of\n\
|
||||
all errors. Should be good enough for most cases.\n\
|
||||
-U --update-state Mark tables as crashed if you find any errors.\n\
|
||||
-U, --update-state Mark tables as crashed if you find any errors.\n\
|
||||
-T, --read-only Don't mark table as checked.\n");
|
||||
|
||||
puts("Recover (repair)/ options (When using '-r' or '-o'):\n\
|
||||
puts("\
|
||||
Recover (repair)/ options (When using '--recover' or '--safe-recover'):\n\
|
||||
-B, --backup Make a backup of the .MAD file as 'filename-time.BAK'.\n\
|
||||
--correct-checksum Correct checksum information for table.\n\
|
||||
-D, --data-file-length=# Max length of data file (when recreating data\n\
|
||||
@ -531,7 +530,7 @@ static void usage(void)
|
||||
|
||||
puts("Other actions:\n\
|
||||
-a, --analyze Analyze distribution of keys. Will make some joins in\n\
|
||||
MySQL faster. You can check the calculated distribution\n\
|
||||
MariaDB faster. You can check the calculated distribution\n\
|
||||
by using '--description --verbose table_name'.\n\
|
||||
--stats_method=name Specifies how index statistics collection code should\n\
|
||||
treat NULLs. Possible values of name are \"nulls_unequal\"\n\
|
||||
@ -554,6 +553,13 @@ static void usage(void)
|
||||
--zerofill-keep-lsn Like --zerofill but does not zero out LSN of\n\
|
||||
data/index pages.");
|
||||
|
||||
puts("Variables:\n\
|
||||
--page_buffer_size=# Size of page buffer. Used by --safe-repair\n\
|
||||
--read_buffer_size=# Read buffer size for sequential reads during scanning\n\
|
||||
--sort_buffer_size=# Size of sort buffer. Used by --recover\n\
|
||||
--sort_key_blocks=# Internal buffer for sorting keys; Don't touch :)\n\
|
||||
--write_buffer_size=# Write buffer size for sequential writes during repair");
|
||||
|
||||
print_defaults("my", load_default_groups);
|
||||
my_print_variables(my_long_options);
|
||||
}
|
||||
|
@ -145,6 +145,7 @@ static uchar *trn_get_hash_key(const uchar *trn, size_t *len,
|
||||
int trnman_init(TrID initial_trid)
|
||||
{
|
||||
DBUG_ENTER("trnman_init");
|
||||
DBUG_PRINT("enter", ("initial_trid: %lu", (ulong) initial_trid));
|
||||
|
||||
short_trid_to_active_trn= (TRN **)my_malloc(SHORT_TRID_MAX*sizeof(TRN*),
|
||||
MYF(MY_WME|MY_ZEROFILL));
|
||||
|
Loading…
x
Reference in New Issue
Block a user