diff options
author | Aleksander Machniak <alec@alec.pl> | 2015-04-06 12:00:09 +0200 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2015-04-06 12:00:09 +0200 |
commit | 48d01837a0a5725d2779f30d20478e77572e9ac5 (patch) | |
tree | c912c8f80b09c1cc619dce799ebff8dace0dbc16 /program/lib/Roundcube/rcube_db_pgsql.php | |
parent | 1ad0e7da5207ab0403f40ee4e14eb282cfab3080 (diff) |
Fix tables listing routine on mysql and postgres so it skips system or other database tables and views (#1490337)
Diffstat (limited to 'program/lib/Roundcube/rcube_db_pgsql.php')
-rw-r--r-- | program/lib/Roundcube/rcube_db_pgsql.php | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/program/lib/Roundcube/rcube_db_pgsql.php b/program/lib/Roundcube/rcube_db_pgsql.php index ff41df224..b4255513b 100644 --- a/program/lib/Roundcube/rcube_db_pgsql.php +++ b/program/lib/Roundcube/rcube_db_pgsql.php @@ -158,6 +158,25 @@ class rcube_db_pgsql extends rcube_db } /** + * Returns list of tables in a database + * + * @return array List of all tables of the current database + */ + public function list_tables() + { + // get tables if not cached + if ($this->tables === null) { + $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES" + . " WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA NOT IN ('pg_catalog', 'information_schema')" + . " ORDER BY TABLE_NAME"); + + $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array(); + } + + return $this->tables; + } + + /** * Returns PDO DSN string from DSN array * * @param array $dsn DSN parameters |