Ensure that a view is a view and not a table

2022.09-rc
Michael 2020-11-29 19:06:43 +00:00
rodzic ea2923be67
commit 7e6a9bd893
1 zmienionych plików z 41 dodań i 1 usunięć

Wyświetl plik

@ -111,7 +111,11 @@ class View
}
}
$sql = sprintf("DROP VIEW IF EXISTS `%s`", DBA::escape($name));
if (self::isView($name)) {
$sql = sprintf("DROP VIEW `%s`", DBA::escape($name));
} elseif (self::isTable($name)) {
$sql = sprintf("DROP TABLE `%s`", DBA::escape($name));
}
if ($verbose) {
echo $sql . ";\n";
@ -134,4 +138,40 @@ class View
return $r;
}
/**
* Check if the given table/view is a view
*
* @param string $view
* @return boolean "true" if it's a view
*/
private static function isView(string $view)
{
$status = DBA::selectFirst(['INFORMATION_SCHEMA' => 'TABLES'], ['TABLE_TYPE'],
['TABLE_SCHEMA' => DBA::databaseName(), 'TABLE_NAME' => $view]);
if (empty($status['TABLE_TYPE'])) {
return false;
}
return $status['TABLE_TYPE'] == 'VIEW';
}
/**
* Check if the given table/view is a view
*
* @param string $table
* @return boolean "true" if it's a table
*/
private static function isTable(string $table)
{
$status = DBA::selectFirst(['INFORMATION_SCHEMA' => 'TABLES'], ['TABLE_TYPE'],
['TABLE_SCHEMA' => DBA::databaseName(), 'TABLE_NAME' => $table]);
if (empty($status['TABLE_TYPE'])) {
return false;
}
return $status['TABLE_TYPE'] == 'BASE TABLE';
}
}