diff options
Diffstat (limited to 'phpBB/install/database_update.php')
| -rw-r--r-- | phpBB/install/database_update.php | 40 | 
1 files changed, 39 insertions, 1 deletions
| diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 6097341ace..c700b483a5 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2026,7 +2026,7 @@ function change_database_data(&$no_updates, $version)  		// No changes from 3.0.10-RC3 to 3.0.10  		case '3.0.10-RC3':  		break; -		 +  		// Changes from 3.0.10 to 3.0.11-RC1  		case '3.0.10':  			// Updates users having current style a deactivated one @@ -2050,6 +2050,44 @@ function change_database_data(&$no_updates, $version)  				_sql($sql, $errored, $error_ary);  			} +			// Delete orphan private messages +			$batch_size = 500; + +			$sql_array = array( +				'SELECT'	=> 'p.msg_id', +				'FROM'		=> array( +					PRIVMSGS_TABLE	=> 'p', +				), +				'LEFT_JOIN'	=> array( +					array( +						'FROM'	=> array(PRIVMSGS_TO_TABLE => 't'), +						'ON'	=> 'p.msg_id = t.msg_id', +					), +				), +				'WHERE'		=> 't.user_id IS NULL', +			); +			$sql = $db->sql_build_query('SELECT', $sql_array); + +			do +			{ +				$result = $db->sql_query_limit($sql, $batch_size); + +				$delete_pms = array(); +				while ($row = $db->sql_fetchrow($result)) +				{ +					$delete_pms[] = (int) $row['msg_id']; +				} +				$db->sql_freeresult($result); + +				if (!empty($delete_pms)) +				{ +					$sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' +						WHERE ' . $db->sql_in_set('msg_id', $delete_pms); +					_sql($sql, $errored, $error_ary); +				} +			} +			while (sizeof($delete_pms) == $batch_size); +  			$no_updates = false;  		break;  	} | 
