Merge pull request #9608 from annando/delete-table-view

Ensure that a view is a view and not a table
2022.09-rc
Hypolite Petovan 2020-11-29 16:33:07 -05:00 zatwierdzone przez GitHub
commit d05d5a0381
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
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';
}
}