1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
<?php
// $Id: install.pgsql.inc,v 1.6 2007/10/22 15:22:39 dries Exp $
// PostgreSQL specific install functions
/**
* Check if PostgreSQL is available.
*
* @return
* TRUE/FALSE
*/
function pgsql_is_available() {
return function_exists('pg_connect');
}
/**
* Check if we can connect to PostgreSQL.
*
* @return
* TRUE/FALSE
*/
function drupal_test_pgsql($url, &$success) {
if (!pgsql_is_available()) {
drupal_set_message(st('PHP PostgreSQL support not enabled.'), 'error');
return FALSE;
}
$url = parse_url($url);
$conn_string = '';
// Decode url-encoded information in the db connection string
if (isset($url['user'])) {
$conn_string .= ' user='. urldecode($url['user']);
}
if (isset($url['pass'])) {
$conn_string .= ' password='. urldecode($url['pass']);
}
if (isset($url['host'])) {
$conn_string .= ' host='. urldecode($url['host']);
}
if (isset($url['path'])) {
$conn_string .= ' dbname='. substr(urldecode($url['path']), 1);
}
if (isset($url['port'])) {
$conn_string .= ' port='. urldecode($url['port']);
}
// Test connecting to the database.
$connection = @pg_connect($conn_string);
if (!$connection) {
drupal_set_message(st('Failed to connect to your PostgreSQL database server. PostgreSQL reports the following message: %error.<ul><li>Are you sure you have the correct username and password?</li><li>Are you sure that you have typed the correct database hostname?</li><li>Are you sure that the database server is running?</li><li>Are you sure you typed the correct database name?</li></ul>For more help, see the <a href="http://drupal.org/node/258">Installation and upgrading handbook</a>. If you are unsure what these terms mean you should probably contact your hosting provider.', array('%error' => 'Connection failed. See log file for failure reason')), 'error');
return FALSE;
}
$success = array('CONNECT');
// Test CREATE.
$query = 'CREATE TABLE drupal_install_test (id integer NOT NULL)';
$result = pg_query($connection, $query);
if ($error = pg_result_error($result)) {
drupal_set_message(st('Failed to create a test table on your PostgreSQL database server with the command %query. PostgreSQL reports the following message: %error.<ul><li>Are you sure the configured username has the necessary PostgreSQL permissions to create tables in the database?</li></ul>For more help, see the <a href="http://drupal.org/node/258">Installation and upgrading handbook</a>. If you are unsure what these terms mean you should probably contact your hosting provider.', array('%query' => $query, '%error' => $error)), 'error');
return FALSE;
}
$err = FALSE;
$success[] = 'SELECT';
$success[] = 'CREATE';
// Test INSERT.
$query = 'INSERT INTO drupal_install_test (id) VALUES (1)';
$result = pg_query($connection, $query);
if ($error = pg_result_error($result)) {
drupal_set_message(st('Failed to insert a value into a test table on your PostgreSQL database server. We tried inserting a value with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
$err = TRUE;
}
else {
$success[] = 'INSERT';
}
// Test UPDATE.
$query = 'UPDATE drupal_install_test SET id = 2';
$result = pg_query($connection, $query);
if ($error = pg_result_error($result)) {
drupal_set_message(st('Failed to update a value in a test table on your PostgreSQL database server. We tried updating a value with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
$err = TRUE;
}
else {
$success[] = 'UPDATE';
}
// Test LOCK.
$query = 'BEGIN; LOCK drupal_install_test IN SHARE ROW EXCLUSIVE MODE';
$result = pg_query($connection, $query);
if ($error = pg_result_error($result)) {
drupal_set_message(st('Failed to lock a test table on your PostgreSQL database server. We tried locking a table with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
$err = TRUE;
}
else {
$success[] = 'LOCK';
}
// Test UNLOCK, which is done automatically upon transaction end in PostgreSQL
$query = 'COMMIT';
$result = pg_query($connection, $query);
if ($error = pg_result_error()) {
drupal_set_message(st('Failed to unlock a test table on your PostgreSQL database server. We tried unlocking a table with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
$err = TRUE;
}
else {
$success[] = 'UNLOCK';
}
// Test DELETE.
$query = 'DELETE FROM drupal_install_test';
$result = pg_query($connection, $query);
if ($error = pg_result_error()) {
drupal_set_message(st('Failed to delete a value from a test table on your PostgreSQL database server. We tried deleting a value with the command %query and PostgreSQL reported the following error: %error.', array('%query' => $query, '%error' => $error)), 'error');
$err = TRUE;
}
else {
$success[] = 'DELETE';
}
// Test DROP.
$query = 'DROP TABLE drupal_install_test';
$result = pg_query($connection, $query);
if ($error = pg_result_error()) {
drupal_set_message(st('Failed to drop a test table from your PostgreSQL database server. We tried dropping a table with the command %query and PostgreSQL reported the following error %error.', array('%query' => $query, '%error' => $error)), 'error');
$err = TRUE;
}
else {
$success[] = 'DROP';
}
if ($err) {
return FALSE;
}
pg_close($connection);
return TRUE;
}
|