function list_tables($views_mode = false) { global $db_driver, $db_link, $db_name; if ($views_mode && !views_supported()) { return array(); } static $cache_tables; static $cache_views; if ($views_mode) { if (isset($cache_views)) { return $cache_views; } } else { if (isset($cache_tables)) { return $cache_tables; } } static $all_tables; // tables and views if ('mysql' == $db_driver) { if (!isset($all_tables)) { $all_tables = db_assoc("SHOW FULL TABLES"); // assoc: table name => table type (BASE TABLE or VIEW) } // This chunk of code is the same as in pgsql driver. if ($views_mode) { $views = array(); foreach ($all_tables as $view => $type) { if ($type != 'VIEW') { continue; } $views[] = $view; } $cache_views = $views; return $views; } else { $tables = array(); foreach ($all_tables as $table => $type) { if ($type != 'BASE TABLE') { continue; } $tables[] = $table; } $cache_tables = $tables; return $tables; } } if ('pgsql' == $db_driver) { if (!isset($all_tables)) { $query = "SELECT table_name, table_type "; $query .= "FROM information_schema.tables "; $query .= "WHERE table_schema = 'public' "; $query .= "AND (table_type = 'BASE TABLE' OR table_type = 'VIEW') "; $query .= "ORDER BY table_name "; $all_tables = db_assoc($query); } // This chunk of code is the same as in mysql driver. if ($views_mode) { $views = array(); foreach ($all_tables as $view => $type) { if ($type != 'VIEW') { continue; } $views[] = $view; } $cache_views = $views; return $views; } else { $tables = array(); foreach ($all_tables as $table => $type) { if ($type != 'BASE TABLE') { continue; } $tables[] = $table; } $cache_tables = $tables; return $tables; } } }
function IsTableAView($table) { // There is no cache here, so call it only once! global $db_driver, $db_name; if ("mysql" == $db_driver) { // Views and information_schema is supported since 5.0 if (views_supported()) { $query = "SELECT table_name FROM information_schema.tables WHERE table_schema=%0 AND table_name=%1 AND table_type='VIEW' "; $row = db_row($query, array($db_name, $table)); return (bool) $row; } return false; } else { if ("pgsql" == $db_driver) { $query = "SELECT table_name, table_type "; $query .= "FROM information_schema.tables "; $query .= "WHERE table_schema = 'public' "; $query .= "AND table_type = 'VIEW' AND table_name = %0 "; $row = db_row($query, $table); return (bool) $row; } } }