79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
| 
								 | 
							
								# include/wait_show_condition.inc
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# SUMMARY
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#    Waits until the show statement ($show_statement) has at least within one of
							 | 
						||
| 
								 | 
							
								#    the rows of the result set for the field ($field) a value which fulfils
							 | 
						||
| 
								 | 
							
								#    a condition ($condition), or the operation times out.
							 | 
						||
| 
								 | 
							
								#    
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# USAGE
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#    let $show_statement= SHOW PROCESSLIST;
							 | 
						||
| 
								 | 
							
								#    let $field= State;
							 | 
						||
| 
								 | 
							
								#    let $condition= = 'Updating';
							 | 
						||
| 
								 | 
							
								#    --source include/wait_show_condition.inc
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#   OR
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#    let $wait_timeout= 60; # Override default of 30 seconds with 60.
							 | 
						||
| 
								 | 
							
								#    let $show_statement= SHOW PROCESSLIST;
							 | 
						||
| 
								 | 
							
								#    let $field= State;
							 | 
						||
| 
								 | 
							
								#    let $condition= = 'Updating';
							 | 
						||
| 
								 | 
							
								#    --source include/wait_show_condition.inc
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Please do not use this use routine if you can replace the SHOW statement
							 | 
						||
| 
								 | 
							
								# with a select. In such a case include/wait_condition.inc is recommended.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Created: 2009-02-18 mleich
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let $max_run_time= 30;
							 | 
						||
| 
								 | 
							
								if ($wait_timeout)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  let $max_run_time= $wait_timeout;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								# Reset $wait_timeout so that its value won't be used on subsequent
							 | 
						||
| 
								 | 
							
								# calls, and default will be used instead.
							 | 
						||
| 
								 | 
							
								let $wait_timeout= 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# The smallest timespan till UNIX_TIMESTAMP() gets incremented is ~0 seconds.
							 | 
						||
| 
								 | 
							
								# We add one second to avoid the case that somebody measures timespans on a
							 | 
						||
| 
								 | 
							
								# real clock with fractions of seconds, detects that n seconds are sufficient,
							 | 
						||
| 
								 | 
							
								# assigns n to this routine and suffers because he sometimes gets n - 1
							 | 
						||
| 
								 | 
							
								# seconds in reality.
							 | 
						||
| 
								 | 
							
								inc $max_run_time;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let $found= 0;
							 | 
						||
| 
								 | 
							
								let $max_end_time= `SELECT UNIX_TIMESTAMP() + $max_run_time`;
							 | 
						||
| 
								 | 
							
								while (`SELECT UNIX_TIMESTAMP() <= $max_end_time AND $found = 0`)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								   # Sleep a bit to avoid too heavy load.
							 | 
						||
| 
								 | 
							
								   real_sleep 0.2;
							 | 
						||
| 
								 | 
							
								   let $rowno= 1;
							 | 
						||
| 
								 | 
							
								   let $process_result= 1;
							 | 
						||
| 
								 | 
							
								   while (`SELECT $process_result = 1 AND $found = 0`)
							 | 
						||
| 
								 | 
							
								   {
							 | 
						||
| 
								 | 
							
								      let $field_value= query_get_value($show_statement, $field, $rowno);
							 | 
						||
| 
								 | 
							
								      if (`SELECT '$field_value' $condition`)
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         let $found= 1;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (`SELECT '$field_value' = 'No such row'`)
							 | 
						||
| 
								 | 
							
								      {
							 | 
						||
| 
								 | 
							
								         # We are behind the last row of the result set.
							 | 
						||
| 
								 | 
							
								         let $process_result= 0;
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      inc $rowno;
							 | 
						||
| 
								 | 
							
								   }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								if (!$found)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  echo # Timeout in include/wait_show_condition.inc for $wait_condition;
							 | 
						||
| 
								 | 
							
								  echo #         show_statement : $show_statement;
							 | 
						||
| 
								 | 
							
								  echo #         field          : $field;
							 | 
						||
| 
								 | 
							
								  echo #         condition      : $condition;
							 | 
						||
| 
								 | 
							
								  echo #         max_run_time   : $max_run_time;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |