From 48d01837a0a5725d2779f30d20478e77572e9ac5 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Mon, 6 Apr 2015 12:00:09 +0200 Subject: Fix tables listing routine on mysql and postgres so it skips system or other database tables and views (#1490337) --- program/lib/Roundcube/rcube_db_mysql.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'program/lib/Roundcube/rcube_db_mysql.php') diff --git a/program/lib/Roundcube/rcube_db_mysql.php b/program/lib/Roundcube/rcube_db_mysql.php index dd28c25c8..616d1752b 100644 --- a/program/lib/Roundcube/rcube_db_mysql.php +++ b/program/lib/Roundcube/rcube_db_mysql.php @@ -149,6 +149,30 @@ class rcube_db_mysql extends rcube_db return $result; } + /** + * 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) { + // first fetch current database name + $d = $this->query("SELECT database()"); + $d = $this->fetch_array($d); + + // get list of tables in current database + $q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES" + . " WHERE TABLE_SCHEMA = ? AND TABLE_TYPE = 'BASE TABLE'" + . " ORDER BY TABLE_NAME", $d ? $d[0] : ''); + + $this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array(); + } + + return $this->tables; + } + /** * Get database runtime variables * -- cgit v1.2.3