Server IP : 185.86.78.101 / Your IP : 216.73.216.213 Web Server : Apache System : Linux 675867-vds-valikoshka1996.gmhost.pp.ua 5.4.0-150-generic #167-Ubuntu SMP Mon May 15 17:35:05 UTC 2023 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/server/mysql/mysql-test/include/ |
Upload File : |
# This file is a collection of utility tests # for WL#4897: Add EXPLAIN INSERT/UPDATE/DELETE. # # Since MTR doesn't have functions, we use this file instead # including it many times. # # Parameters: # # $query: INSERT/REPLACE/UPDATE/DELETE query to explain # NOTE: this file resets this variable # # $select: may be empty; the SELECT query similar to $query # We use it to compare: # 1) table data before and after EXPLAIN $query evaluation; # 2) EXPLAIN $query and EXPLAIN $select output and # handler/filesort statistics # NOTE: this file resets this variable # $innodb: take $no_rows parameter into account if not 0; # $no_rows: filter out "rows" and "filtered" columns of EXPLAIN if not 0; # it may be necessary for InnoDB tables since InnoDB's table row # counter can't return precise and repeatable values; # NOTE: ANALYZE TABLE doesn't help # NOTE: this file resets this variable --echo # --echo # query: $query --echo # select: $select --echo # if ($select) { --disable_query_log --eval $select INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/before_explain.txt' --enable_query_log } if ($innodb) { if ($no_rows) { --replace_column 10 X } } --eval EXPLAIN $query if (`SELECT ROW_COUNT() > 0`) { --echo # Erroneous query: EXPLAIN $query --die Unexpected ROW_COUNT() <> 0 } FLUSH STATUS; FLUSH TABLES; if ($innodb) { if ($no_rows) { --replace_column 10 X 11 X } } --eval EXPLAIN EXTENDED $query if (`SELECT ROW_COUNT() > 0`) { --echo # Erroneous query: EXPLAIN EXTENDED $query --die Unexpected ROW_COUNT() <> 0 } --echo # Status of EXPLAIN EXTENDED query --disable_query_log --disable_warnings SHOW STATUS WHERE (Variable_name LIKE 'Sort%' OR Variable_name LIKE 'Handler_read_%' OR Variable_name = 'Handler_write' OR Variable_name = 'Handler_update' OR Variable_name = 'Handler_delete') AND Value <> 0; --enable_warnings --enable_query_log if ($json) { if ($innodb) { if ($no_rows) { --replace_regex /"rows_examined_per_scan": [0-9]+/"rows_examined_per_scan": "X"/ /_per_join": [0-9]+/_per_join": "X"/ /_per_join": "[0-9]+K"/_per_join": "X"/ /"filtered": "[0-9.]+"/"filtered": "X"/ /_cost": "[0-9.]+"/_cost": "X"/ /"data_read_per_join": "[0-9.]+"/"data_read_per_join": "X"/ } } --eval EXPLAIN FORMAT=JSON $query; --disable_result_log --exec $MYSQL -S $MASTER_MYSOCK -u root -r test -e "EXPLAIN FORMAT=JSON $query;" > $MYSQLTEST_VARDIR/tmp/explain.json --exec perl $MYSQL_TEST_DIR/suite/opt_trace/validate_json.pl $MYSQLTEST_VARDIR/tmp/explain.json --remove_file '$MYSQLTEST_VARDIR/tmp/explain.json' --enable_result_log } if ($select) { FLUSH STATUS; FLUSH TABLES; if ($innodb) { if ($no_rows) { --replace_column 10 X 11 X } } --eval EXPLAIN EXTENDED $select --echo # Status of EXPLAIN EXTENDED "equivalent" SELECT query execution --disable_query_log --disable_warnings SHOW STATUS WHERE (Variable_name LIKE 'Sort%' OR Variable_name LIKE 'Handler_read_%' OR Variable_name = 'Handler_write' OR Variable_name = 'Handler_update' OR Variable_name = 'Handler_delete') AND Value <> 0; --enable_warnings --enable_query_log if ($json) { if ($innodb) { if ($no_rows) { --replace_regex /"rows_examined_per_scan": [0-9]+/"rows_examined_per_scan": "X"/ /_per_join": [0-9]+/_per_join": "X"/ /_per_join": "[0-9]+K"/_per_join": "X"/ /"filtered": "[0-9.]+"/"filtered": "X"/ /_cost": "[0-9.]+"/_cost": "X"/ /"data_read_per_join": "[0-9.]+"/"data_read_per_join": "X"/ } } --eval EXPLAIN FORMAT=JSON $select; --disable_result_log --exec $MYSQL -S $MASTER_MYSOCK -u root -r test -e "EXPLAIN FORMAT=JSON $select;" > $MYSQLTEST_VARDIR/tmp/explain.json --exec perl $MYSQL_TEST_DIR/suite/opt_trace/validate_json.pl $MYSQLTEST_VARDIR/tmp/explain.json --remove_file '$MYSQLTEST_VARDIR/tmp/explain.json' --enable_result_log } } --disable_query_log if ($select) { --eval $select INTO OUTFILE '$MYSQLTEST_VARDIR/tmp/after_explain.txt' --diff_files '$MYSQLTEST_VARDIR/tmp/before_explain.txt' '$MYSQLTEST_VARDIR/tmp/after_explain.txt' --remove_file '$MYSQLTEST_VARDIR/tmp/before_explain.txt' --remove_file '$MYSQLTEST_VARDIR/tmp/after_explain.txt' } FLUSH STATUS; FLUSH TABLES; if ($select) { --disable_result_log --eval $select --enable_result_log --echo # Status of "equivalent" SELECT query execution: --disable_warnings SHOW STATUS WHERE (Variable_name LIKE 'Sort%' OR Variable_name LIKE 'Handler_read_%' OR Variable_name = 'Handler_write' OR Variable_name = 'Handler_update' OR Variable_name = 'Handler_delete') AND Value <> 0; --enable_warnings } FLUSH STATUS; FLUSH TABLES; --eval $query --echo # Status of testing query execution: --disable_warnings SHOW STATUS WHERE (Variable_name LIKE 'Sort%' OR Variable_name LIKE 'Handler_read_%' OR Variable_name = 'Handler_write' OR Variable_name = 'Handler_update' OR Variable_name = 'Handler_delete') AND Value <> 0; --enable_warnings --let $query= --let $select= --let $no_rows= --enable_query_log --echo