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;
        }
    }
}
Example #2
0
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;
        }
    }
}