1# include/wait_condition.inc
2#
3# SUMMARY
4#
5#    Waits until the passed statement returns true, or the operation
6#    times out.
7#
8# USAGE
9#
10#    let $wait_condition=
11#      SELECT c = 3 FROM t;
12#    --source include/wait_condition.inc
13#
14#   OR
15#
16#    let $wait_timeout= 60; # Override default 30 seconds with 60.
17#    let $wait_condition=
18#      SELECT c = 3 FROM t;
19#    --source include/wait_condition.inc
20#    --echo Executed the test condition $wait_condition_reps times
21#
22# EXAMPLE
23#    events_bugs.test, events_time_zone.test
24#
25
26--disable_query_log
27
28let $wait_counter= 300;
29if ($wait_timeout)
30{
31  let $wait_counter= `SELECT $wait_timeout * 10`;
32}
33# Reset $wait_timeout so that its value won't be used on subsequent
34# calls, and default will be used instead.
35let $wait_timeout= 0;
36
37# Keep track of how many times the wait condition is tested
38# This is used by some tests (e.g., main.status)
39let $wait_condition_reps= 0;
40while ($wait_counter)
41{
42    --error 0,ER_NO_SUCH_TABLE,ER_LOCK_WAIT_TIMEOUT,ER_UNKNOWN_COM_ERROR,ER_LOCK_DEADLOCK
43    let $success= `$wait_condition`;
44    inc $wait_condition_reps;
45    if ($success)
46    {
47        let $wait_counter= 0;
48    }
49    if (!$success)
50    {
51        real_sleep 0.1;
52        dec $wait_counter;
53    }
54}
55if (!$success)
56{
57  echo Timeout in wait_condition.inc for $wait_condition;
58  show full processlist;
59}
60
61--enable_query_log
62