1# ==== Purpose ==== 2# 3# Execute a statement and write the result to a file. This is useful 4# if the output needs more advanced parsing than can be done by 5# mysqltest commands. 6# 7# ==== Usage ==== 8# 9# --let $statement= <STATEMENT> 10# --let $output_file= {<FILE>|GENERATE} 11# [--let $server_number= <NUMBER>] 12# [--let $dont_print_statement= 1] 13# --source include/write_result_to_file.inc 14# 15# Parameters: 16# $statement 17# The statement to execute. 18# 19# $server_number 20# 1 for the master, 2 for the slave, 3 for next server, etc. 21# If omitted, uses current connection. 22# 23# $output_file 24# Name of file to write. If omitted, generates a new filename and 25# stores the name both in the mysqltest variable $output_file and 26# in the environment variable $OUTPUT_FILE. 27# 28# $dont_print_statement 29# By default, the statement is echoed to the result log. If the 30# statement contains non-deterministic output, set this variable 31# to suppress it. 32 33--let _WRTF_SERVER_NUMBER= $server_number 34if (!$server_number) 35{ 36 --let _WRTF_SERVER_NUMBER= `SELECT 1 + @@PORT - $MASTER_MYPORT` 37} 38 39--let $_write_result_msg= [server=$_WRTF_SERVER_NUMBER] 40if (!$dont_print_statement) 41{ 42 --let $_write_result_msg= [server=$_WRTF_SERVER_NUMBER statement=$statement] 43} 44 45--let $include_filename= write_result_to_file.inc $_write_result_msg 46--source include/begin_include_file.inc 47 48if ($statement == '') 49{ 50 --die !!!ERROR IN TEST: mysqltest variable 'statement' not set in write_result_to_file.inc 51} 52--let _WRTF_STATEMENT= $statement 53 54if (!$output_file) 55{ 56 --die !!!ERROR IN TEST: mysqltest variable 'output_file' not set in write_result_to_file.inc 57} 58if ($output_file == GENERATE) 59{ 60 --let $output_file= `SELECT UUID()` 61 --let $output_file= $MYSQLTEST_VARDIR/tmp/_stmt_file_$output_file 62} 63--let _WRTF_OUTPUT_FILE= $output_file 64 65perl; 66 my $stmt= $ENV{'_WRTF_STATEMENT'}; 67 my $server_number= $ENV{'_WRTF_SERVER_NUMBER'}; 68 my $mysql = $ENV{'MYSQL'}; 69 $mysql =~ s/( --|$)/ --defaults-group-suffix=.$server_number$1/; 70 my $outfile = $ENV{'_WRTF_OUTPUT_FILE'}; 71 open MYSQL, "| $mysql > $outfile" or die "Failed to open pipe to client on server '$server_number': $!"; 72 print MYSQL $stmt, ';' or die "Error printing statement to MYSQL pipe: $!"; 73 close MYSQL or die "Error closing MYSQL pipe: $!"; 74EOF 75 76--let $include_filename= write_result_to_file.inc [$write_result_msg] 77--source include/end_include_file.inc 78