From e681c4e7357771ddd806639d31ede293064c9160 Mon Sep 17 00:00:00 2001 From: Abu Dzakiyyah <cyberzilla@ymail.com> Date: Thu, 1 Apr 2021 04:15:53 +0800 Subject: [PATCH 1/2] Add Mysql Function Backup Still testing --- src/MySQLDump.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/MySQLDump.php b/src/MySQLDump.php index cf6a8a9..7e02cbd 100644 --- a/src/MySQLDump.php +++ b/src/MySQLDump.php @@ -16,7 +16,8 @@ class MySQLDump public const CREATE = 2; public const DATA = 4; public const TRIGGERS = 8; - public const ALL = 15; // DROP | CREATE | DATA | TRIGGERS + public const FUNCTIONS = 16; + public const ALL = 31; // DROP | CREATE | DATA | TRIGGERS | FUNCTIONS private const MAX_SQL_SIZE = 1e6; @@ -202,6 +203,19 @@ public function dumpTable($handle, $table): void } $res->close(); } + + //STILL TEST + if ($mode & self::FUNCTIONS) { + $res = $this->connection->query("SHOW FUNCTION STATUS WHERE Security_type='DEFINER'"); + fwrite($handle, "DELIMITER ;;\n\n"); + while ($rows = $res->fetch_assoc()) { + $row = $this->connection->query("SHOW CREATE FUNCTION {$this->delimite($rows['Name'])}"); + $func = $row->fetch_assoc(); + fwrite($handle, $func['Create Function']. "$$;\n\n"); + } + fwrite($handle, "DELIMITER ;\n\n"); + $res->close(); + } fwrite($handle, "\n"); } From 0a1533bab19d12ac82ea4a604bdc97ff1f614c18 Mon Sep 17 00:00:00 2001 From: Abu Dzakiyyah <cyberzilla@ymail.com> Date: Wed, 14 Apr 2021 16:13:51 +0800 Subject: [PATCH 2/2] Update MySQLDump.php --- src/MySQLDump.php | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/MySQLDump.php b/src/MySQLDump.php index 7e02cbd..0ffdf5e 100644 --- a/src/MySQLDump.php +++ b/src/MySQLDump.php @@ -131,6 +131,20 @@ public function dumpTable($handle, $table): void $view = isset($row['Create View']); + if ($view && ($mode & self::FUNCTIONS)) { + $db = $this->connection->query('SELECT DATABASE()')->fetch_row(); + $fres = $this->connection->query("SHOW FUNCTION STATUS WHERE Db='$db[0]'"); + while ($rows = $fres->fetch_assoc()) { + fwrite($handle, "DROP FUNCTION IF EXISTS {$this->delimite($rows['Name'])};\n"); + fwrite($handle, "DELIMITER ;;\n\n"); + $frow = $this->connection->query("SHOW CREATE FUNCTION {$this->delimite($rows['Name'])}"); + $func = $frow->fetch_assoc(); + fwrite($handle, $func['Create Function']. "\n;;\n\n"); + fwrite($handle, "DELIMITER ;\n\n"); + } + $fres->close(); + } + if ($mode & self::DROP) { fwrite($handle, 'DROP ' . ($view ? 'VIEW' : 'TABLE') . " IF EXISTS $delTable;\n\n"); } @@ -203,19 +217,6 @@ public function dumpTable($handle, $table): void } $res->close(); } - - //STILL TEST - if ($mode & self::FUNCTIONS) { - $res = $this->connection->query("SHOW FUNCTION STATUS WHERE Security_type='DEFINER'"); - fwrite($handle, "DELIMITER ;;\n\n"); - while ($rows = $res->fetch_assoc()) { - $row = $this->connection->query("SHOW CREATE FUNCTION {$this->delimite($rows['Name'])}"); - $func = $row->fetch_assoc(); - fwrite($handle, $func['Create Function']. "$$;\n\n"); - } - fwrite($handle, "DELIMITER ;\n\n"); - $res->close(); - } fwrite($handle, "\n"); }