]> git.mxchange.org Git - friendica.git/commitdiff
Ensure that a view is a view and not a table
authorMichael <heluecht@pirati.ca>
Sun, 29 Nov 2020 19:06:43 +0000 (19:06 +0000)
committerMichael <heluecht@pirati.ca>
Sun, 29 Nov 2020 19:06:43 +0000 (19:06 +0000)
src/Database/View.php

index e1335d9df65f049307877085451e832b23cab5d7..bfdcdff7caf7c78a25a74bc72b76e985da859b0b 100644 (file)
@@ -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';
+       }
 }