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");
 	}