return ($this->getOne($sSQL, array(':tablename' => $sTableName)) == 1);
}
+ /**
+ * Returns a list of table names in the database
+ *
+ * @return array[]
+ */
+ public function getListOfTables()
+ {
+ return $this->getCol("SELECT tablename FROM pg_tables WHERE schemaname='public'");
+ }
+
+ /**
+ * Deletes a table. Returns true on success. Returns true if the table didn't exist.
+ *
+ * @param string $sTableName
+ *
+ * @return boolean
+ */
+ public function deleteTable($sTableName)
+ {
+ return $this->exec('DROP TABLE IF EXISTS '.$sTableName.' CASCADE') == 0;
+ }
+
/**
* Check if an index exists in the database. Optional filtered by tablename
*
}
/**
- * Since the DSN includes the database name, checks if the connection works.
+ * Tries to connect to the database but on failure doesn't throw an exception.
*
* @return boolean
*/
- public function databaseExists()
+ public function checkConnection()
{
$bExists = true;
try {
return (float) ($aMatches[1].'.'.$aMatches[2]);
}
+ /**
+ * Returns an associate array of postgresql database connection settings. Keys can
+ * be 'database', 'hostspec', 'port', 'username', 'password'.
+ * Returns empty array on failure, thus check if at least 'database' is set.
+ *
+ * @return array[]
+ */
public static function parseDSN($sDSN)
{
// https://secure.php.net/manual/en/ref.pdo-pgsql.connection.php
}
return $aInfo;
}
+
+ /**
+ * Takes an array of settings and return the DNS string. Key names can be
+ * 'database', 'hostspec', 'port', 'username', 'password' but aliases
+ * 'dbname', 'host' and 'user' are also supported.
+ *
+ * @return string
+ *
+ */
+ public static function generateDSN($aInfo)
+ {
+ $sDSN = 'pgsql:';
+ if (isset($aInfo['host'])) {
+ $sDSN .= 'host=' . $aInfo['host'] . ';';
+ } elseif (isset($aInfo['hostspec'])) {
+ $sDSN .= 'host=' . $aInfo['hostspec'] . ';';
+ }
+ if (isset($aInfo['port'])) {
+ $sDSN .= 'port=' . $aInfo['port'] . ';';
+ }
+ if (isset($aInfo['dbname'])) {
+ $sDSN .= 'dbname=' . $aInfo['dbname'] . ';';
+ } elseif (isset($aInfo['database'])) {
+ $sDSN .= 'dbname=' . $aInfo['database'] . ';';
+ }
+ if (isset($aInfo['user'])) {
+ $sDSN .= 'user=' . $aInfo['user'] . ';';
+ } elseif (isset($aInfo['username'])) {
+ $sDSN .= 'user=' . $aInfo['username'] . ';';
+ }
+ if (isset($aInfo['password'])) {
+ $sDSN .= 'password=' . $aInfo['password'] . ';';
+ }
+ $sDSN = preg_replace('/;$/', '', $sDSN);
+
+ return $sDSN;
+ }
}