Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/classes/Database/Routines.php')
-rw-r--r--libraries/classes/Database/Routines.php44
1 files changed, 38 insertions, 6 deletions
diff --git a/libraries/classes/Database/Routines.php b/libraries/classes/Database/Routines.php
index 2f471d73cd..a8e9a0860a 100644
--- a/libraries/classes/Database/Routines.php
+++ b/libraries/classes/Database/Routines.php
@@ -204,9 +204,9 @@ class Routines
} else {
// Backup the old routine, in case something goes wrong
if ($_POST['item_original_type'] === 'FUNCTION') {
- $create_routine = $this->dbi->getDefinition($db, 'FUNCTION', $_POST['item_original_name']);
+ $create_routine = self::getFunctionDefinition($this->dbi, $db, $_POST['item_original_name']);
} else {
- $create_routine = $this->dbi->getDefinition($db, 'PROCEDURE', $_POST['item_original_name']);
+ $create_routine = self::getProcedureDefinition($this->dbi, $db, $_POST['item_original_name']);
}
$privilegesBackup = $this->backupPrivileges();
@@ -575,7 +575,11 @@ class Routines
$retval['item_name'] = $routine['SPECIFIC_NAME'];
$retval['item_type'] = $routine['ROUTINE_TYPE'];
- $definition = $this->dbi->getDefinition($GLOBALS['db'], $routine['ROUTINE_TYPE'], $routine['SPECIFIC_NAME']);
+ if ($routine['ROUTINE_TYPE'] === 'FUNCTION') {
+ $definition = self::getFunctionDefinition($this->dbi, $GLOBALS['db'], $routine['SPECIFIC_NAME']);
+ } else {
+ $definition = self::getProcedureDefinition($this->dbi, $GLOBALS['db'], $routine['SPECIFIC_NAME']);
+ }
if ($definition === null) {
return null;
@@ -1474,7 +1478,12 @@ class Routines
// we will show a dialog to get values for these parameters,
// otherwise we can execute it directly.
- $definition = $this->dbi->getDefinition($GLOBALS['db'], $routine['type'], $routine['name']);
+ if ($routine['type'] === 'FUNCTION') {
+ $definition = self::getFunctionDefinition($this->dbi, $GLOBALS['db'], $routine['name']);
+ } else {
+ $definition = self::getProcedureDefinition($this->dbi, $GLOBALS['db'], $routine['name']);
+ }
+
$executeAction = '';
if ($definition !== null) {
@@ -1540,11 +1549,14 @@ class Routines
return;
}
- if ($_GET['item_type'] !== 'FUNCTION' && $_GET['item_type'] !== 'PROCEDURE') {
+ if ($_GET['item_type'] === 'FUNCTION') {
+ $routineDefinition = self::getFunctionDefinition($this->dbi, $GLOBALS['db'], $_GET['item_name']);
+ } elseif ($_GET['item_type'] === 'PROCEDURE') {
+ $routineDefinition = self::getProcedureDefinition($this->dbi, $GLOBALS['db'], $_GET['item_name']);
+ } else {
return;
}
- $routineDefinition = $this->dbi->getDefinition($GLOBALS['db'], $_GET['item_type'], $_GET['item_name']);
$exportData = false;
if ($routineDefinition !== null) {
@@ -1660,4 +1672,24 @@ class Routines
return $ret;
}
+
+ public static function getFunctionDefinition(DatabaseInterface $dbi, string $db, string $name): ?string
+ {
+ $result = $dbi->fetchValue(
+ 'SHOW CREATE FUNCTION ' . Util::backquote($db) . '.' . Util::backquote($name),
+ 'Create Function'
+ );
+
+ return is_string($result) ? $result : null;
+ }
+
+ public static function getProcedureDefinition(DatabaseInterface $dbi, string $db, string $name): ?string
+ {
+ $result = $dbi->fetchValue(
+ 'SHOW CREATE PROCEDURE ' . Util::backquote($db) . '.' . Util::backquote($name),
+ 'Create Procedure'
+ );
+
+ return is_string($result) ? $result : null;
+ }
}