From d3afd6ec68b0c90b28e020dd2b9035e2bf7dd41d Mon Sep 17 00:00:00 2001
From: 3D-I <480857+3D-I@users.noreply.github.com>
Date: Mon, 2 Nov 2020 17:40:06 +0100
Subject: [PATCH] [ticket/16629] Fix ACP get_database_size() for MySql 8

PHPBB3-16629
---
 phpBB/includes/functions_admin.php | 42 +++++++++++-------------------
 1 file changed, 15 insertions(+), 27 deletions(-)

diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php
index b190fcf899..08e275a0ed 100644
--- a/phpBB/includes/functions_admin.php
+++ b/phpBB/includes/functions_admin.php
@@ -2832,15 +2832,13 @@ function view_warned_users(&$users, &$user_count, $limit = 0, $offset = 0, $limi
 
 /**
 * Get database size
-* Currently only mysql and mssql are supported
 */
 function get_database_size()
 {
-	global $db, $user, $table_prefix;
+	global $db, $user;
 
 	$database_size = false;
 
-	// This code is heavily influenced by a similar routine in phpMyAdmin 2.2.0
 	switch ($db->get_sql_layer())
 	{
 		case 'mysqli':
@@ -2853,35 +2851,25 @@ function get_database_size()
 			{
 				$version = $row['mysql_version'];
 
-				if (preg_match('#(3\.23|[45]\.|10\.[0-9]\.[0-9]{1,2}-+Maria)#', $version))
+				$db_name = $db->get_db_name();
+
+				$sql = 'SHOW TABLE STATUS
+					FROM ' . $db_name;
+				$result = $db->sql_query($sql, 7200);
+
+				while ($row = $db->sql_fetchrow($result))
 				{
-					$db_name = (preg_match('#^(?:3\.23\.(?:[6-9]|[1-9]{2}))|[45]\.|10\.[0-9]\.[0-9]{1,2}-+Maria#', $version)) ? "`{$db->get_db_name()}`" : $db->get_db_name();
-
-					$sql = 'SHOW TABLE STATUS
-						FROM ' . $db_name;
-					$result = $db->sql_query($sql, 7200);
-
-					$database_size = 0;
-					while ($row = $db->sql_fetchrow($result))
+					if (isset($row['Engine'])
+						&& ($row['Engine'] == ('MyISAM' || 'InnoDB' || 'Aria'))
+					)
 					{
-						if ((isset($row['Type']) && $row['Type'] != 'MRG_MyISAM') || (isset($row['Engine']) && ($row['Engine'] == 'MyISAM' || $row['Engine'] == 'InnoDB' || $row['Engine'] == 'Aria')))
-						{
-							if ($table_prefix != '')
-							{
-								if (strpos($row['Name'], $table_prefix) !== false)
-								{
-									$database_size += $row['Data_length'] + $row['Index_length'];
-								}
-							}
-							else
-							{
-								$database_size += $row['Data_length'] + $row['Index_length'];
-							}
-						}
+						$database_size += $row['Data_length'] + $row['Index_length'];
 					}
-					$db->sql_freeresult($result);
 				}
+
+				$db->sql_freeresult($result);
 			}
+
 		break;
 
 		case 'sqlite3':