Skip to content

Commit

Permalink
Fix tables listing routine on mysql and postgres so it skips system o…
Browse files Browse the repository at this point in the history
…r other database tables and views (#1490337)
  • Loading branch information
alecpl committed Apr 6, 2015
1 parent 998afb1 commit b41140b
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 7 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Expand Up @@ -5,6 +5,7 @@ CHANGELOG Roundcube Webmail
- Fix zipped messages downloads after selecting all messages in a folder (#1490339)
- Fix vpopmaild driver of password plugin
- Fix PHP warning: Non-static method PEAR::setErrorHandling() should not be called statically (#1490343)
- Fix tables listing routine on mysql and postgres so it skips system or other database tables and views (#1490337)

RELEASE 1.1.1
-------------
Expand Down
11 changes: 4 additions & 7 deletions program/lib/Roundcube/rcube_db.php
Expand Up @@ -691,14 +691,11 @@ public function list_tables()
{
// get tables if not cached
if ($this->tables === null) {
$q = $this->query('SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME');
$q = $this->query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES"
. " WHERE TABLE_TYPE = 'BASE TABLE'"
. " ORDER BY TABLE_NAME");

if ($q) {
$this->tables = $q->fetchAll(PDO::FETCH_COLUMN, 0);
}
else {
$this->tables = array();
}
$this->tables = $q ? $q->fetchAll(PDO::FETCH_COLUMN, 0) : array();
}

return $this->tables;
Expand Down
24 changes: 24 additions & 0 deletions program/lib/Roundcube/rcube_db_mysql.php
Expand Up @@ -149,6 +149,30 @@ protected function dsn_options($dsn)
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
*
Expand Down
19 changes: 19 additions & 0 deletions program/lib/Roundcube/rcube_db_pgsql.php
Expand Up @@ -157,6 +157,25 @@ public function get_variable($varname, $default = null)
return isset($this->variables[$varname]) ? $this->variables[$varname] : $default;
}

/**
* 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
*
Expand Down

0 comments on commit b41140b

Please sign in to comment.