diff options
Diffstat (limited to 'mysql-test/include/write_result_to_file.inc')
-rw-r--r-- | mysql-test/include/write_result_to_file.inc | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/mysql-test/include/write_result_to_file.inc b/mysql-test/include/write_result_to_file.inc new file mode 100644 index 00000000..3e2ddf48 --- /dev/null +++ b/mysql-test/include/write_result_to_file.inc @@ -0,0 +1,77 @@ +# ==== Purpose ==== +# +# Execute a statement and write the result to a file. This is useful +# if the output needs more advanced parsing than can be done by +# mysqltest commands. +# +# ==== Usage ==== +# +# --let $statement= <STATEMENT> +# --let $output_file= {<FILE>|GENERATE} +# [--let $server_number= <NUMBER>] +# [--let $dont_print_statement= 1] +# --source include/write_result_to_file.inc +# +# Parameters: +# $statement +# The statement to execute. +# +# $server_number +# 1 for the master, 2 for the slave, 3 for next server, etc. +# If omitted, uses current connection. +# +# $output_file +# Name of file to write. If omitted, generates a new filename and +# stores the name both in the mysqltest variable $output_file and +# in the environment variable $OUTPUT_FILE. +# +# $dont_print_statement +# By default, the statement is echoed to the result log. If the +# statement contains non-deterministic output, set this variable +# to suppress it. + +--let _WRTF_SERVER_NUMBER= $server_number +if (!$server_number) +{ + --let _WRTF_SERVER_NUMBER= `SELECT 1 + @@PORT - $MASTER_MYPORT` +} + +--let $_write_result_msg= [server=$_WRTF_SERVER_NUMBER] +if (!$dont_print_statement) +{ + --let $_write_result_msg= [server=$_WRTF_SERVER_NUMBER statement=$statement] +} + +--let $include_filename= write_result_to_file.inc $_write_result_msg +--source include/begin_include_file.inc + +if ($statement == '') +{ + --die !!!ERROR IN TEST: mysqltest variable 'statement' not set in write_result_to_file.inc +} +--let _WRTF_STATEMENT= $statement + +if (!$output_file) +{ + --die !!!ERROR IN TEST: mysqltest variable 'output_file' not set in write_result_to_file.inc +} +if ($output_file == GENERATE) +{ + --let $output_file= `SELECT UUID()` + --let $output_file= $MYSQLTEST_VARDIR/tmp/_stmt_file_$output_file +} +--let _WRTF_OUTPUT_FILE= $output_file + +perl; + my $stmt= $ENV{'_WRTF_STATEMENT'}; + my $server_number= $ENV{'_WRTF_SERVER_NUMBER'}; + my $mysql = $ENV{'MYSQL'}; + $mysql =~ s/( --|$)/ --defaults-group-suffix=.$server_number$1/; + my $outfile = $ENV{'_WRTF_OUTPUT_FILE'}; + open MYSQL, "| $mysql > $outfile" or die "Failed to open pipe to client on server '$server_number': $!"; + print MYSQL $stmt, ';' or die "Error printing statement to MYSQL pipe: $!"; + close MYSQL or die "Error closing MYSQL pipe: $!"; +EOF + +--let $include_filename= write_result_to_file.inc [$write_result_msg] +--source include/end_include_file.inc |