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