]> git.mxchange.org Git - friendica.git/blobdiff - src/Database/View.php
Issue 9657: Check the age of an item
[friendica.git] / src / Database / View.php
index e1335d9df65f049307877085451e832b23cab5d7..fd0a8ce1a52cf48a700a5792f9626d7cef1afe6d 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 IF EXISTS `%s`", DBA::escape($name));
+               } elseif (self::isTable($name)) {
+                       $sql = sprintf("DROP TABLE IF EXISTS `%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';
+       }
 }