forked from hans/Nominatim
Nominatim::DB tests against separate postgresql database
This commit is contained in:
70
lib/DB.php
70
lib/DB.php
@@ -240,6 +240,28 @@ class DB
|
||||
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
|
||||
*
|
||||
@@ -311,11 +333,11 @@ END;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 {
|
||||
@@ -350,6 +372,13 @@ END;
|
||||
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
|
||||
@@ -365,4 +394,41 @@ END;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user