Current Path : /home/usr.opt/mysql57/mysql-test/include/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : /home/usr.opt/mysql57/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