From 0443990ccd96bde1641733db8b9f2b9b891de99f Mon Sep 17 00:00:00 2001 From: Jack Phoenix Date: Sun, 5 Sep 2010 18:35:34 +0000 Subject: [PATCH] coding style tweaks --- includes/db/DatabaseOracle.php | 96 +++-- includes/db/DatabasePostgres.php | 700 ++++++++++++++++--------------- 2 files changed, 410 insertions(+), 386 deletions(-) diff --git a/includes/db/DatabaseOracle.php b/includes/db/DatabaseOracle.php index dc42ac9ff2..df1593f12e 100644 --- a/includes/db/DatabaseOracle.php +++ b/includes/db/DatabaseOracle.php @@ -301,7 +301,6 @@ class DatabaseOracle extends DatabaseBase { $sql = preg_replace( '/^EXPLAIN /', 'EXPLAIN PLAN SET STATEMENT_ID = \'' . $explain_id . '\' FOR', $sql, 1, $explain_count ); - wfSuppressWarnings(); if ( ( $this->mLastResult = $stmt = oci_parse( $this->mConn, $sql ) ) === false ) { @@ -560,7 +559,9 @@ class DatabaseOracle extends DatabaseBase { if ( ( $sequenceData = $this->getSequenceData( $destTable ) ) !== false && !isset( $varMap[$sequenceData['column']] ) ) + { $varMap[$sequenceData['column']] = 'GET_SEQUENCE_VALUE(\'' . $sequenceData['sequence'] . '\')'; + } // count-alias subselect fields to avoid abigious definition errors $i = 0; @@ -675,15 +676,23 @@ class DatabaseOracle extends DatabaseBase { return ( isset( $this->sequenceData[$table] ) ) ? $this->sequenceData[$table] : false; } - # REPLACE query wrapper - # Oracle simulates this with a DELETE followed by INSERT - # $row is the row to insert, an associative array - # $uniqueIndexes is an array of indexes. Each element may be either a - # field name or an array of field names - # - # It may be more efficient to leave off unique indexes which are unlikely to collide. - # However if you do this, you run the risk of encountering errors which wouldn't have - # occurred in MySQL + /** + * REPLACE query wrapper + * Oracle simulates this with a DELETE followed by INSERT + * $row is the row to insert, an associative array + * $uniqueIndexes is an array of indexes. Each element may be either a + * field name or an array of field names + * + * It may be more efficient to leave off unique indexes which are unlikely to collide. + * However if you do this, you run the risk of encountering errors which wouldn't have + * occurred in MySQL. + * + * @param $table String: table name + * @param $uniqueIndexes Array: array of indexes. Each element may be + * either a field name or an array of field names + * @param $rows Array: rows to insert to $table + * @param $fname String: function name, you can use __METHOD__ here + */ function replace( $table, $uniqueIndexes, $rows, $fname = 'DatabaseOracle::replace' ) { $table = $this->tableName( $table ); @@ -702,9 +711,10 @@ class DatabaseOracle extends DatabaseBase { # Delete rows which collide if ( $uniqueIndexes ) { $condsDelete = array(); - foreach ( $uniqueIndexes as $index ) + foreach ( $uniqueIndexes as $index ) { $condsDelete[$index] = $row[$index]; - if (count($condsDelete) > 0) { + } + if ( count( $condsDelete ) > 0 ) { $this->delete( $table, $condsDelete, $fname ); } } @@ -719,9 +729,9 @@ class DatabaseOracle extends DatabaseBase { } # DELETE where the condition is a join - function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = "DatabaseOracle::deleteJoin" ) { + function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = 'DatabaseOracle::deleteJoin' ) { if ( !$conds ) { - throw new DBUnexpectedError( $this, 'DatabaseOracle::deleteJoin() called with empty $conds' ); + throw new DBUnexpectedError( $this, 'DatabaseOracle::deleteJoin() called with empty $conds' ); } $delTable = $this->tableName( $delTable ); @@ -738,7 +748,7 @@ class DatabaseOracle extends DatabaseBase { # Returns the size of a text field, or -1 for "unlimited" function textFieldSize( $table, $field ) { $fieldInfoData = $this->fieldInfo( $table, $field); - if ( $fieldInfoData->type == "varchar" ) { + if ( $fieldInfoData->type == 'varchar' ) { $size = $row->size - 4; } else { $size = $row->size; @@ -753,7 +763,6 @@ class DatabaseOracle extends DatabaseBase { return "SELECT * FROM ($sql) WHERE rownum >= (1 + $offset) AND rownum < (1 + $limit + $offset)"; } - function unionQueries( $sqls, $all ) { $glue = ' UNION ALL '; return 'SELECT * ' . ( $all ? '':'/* UNION_UNIQUE */ ' ) . 'FROM (' . implode( $glue, $sqls ) . ')' ; @@ -763,28 +772,27 @@ class DatabaseOracle extends DatabaseBase { return $this->lastErrno() == 'OCI-00060'; } - function duplicateTableStructure( $oldName, $newName, $temporary = false, $fname = 'DatabaseOracle::duplicateTableStructure' ) { $temporary = $temporary ? 'TRUE' : 'FALSE'; - $oldName = trim(strtoupper($oldName), '"'); - $oldParts = explode('_', $oldName); + $oldName = trim( strtoupper( $oldName ), '"'); + $oldParts = explode( '_', $oldName ); - $newName = trim(strtoupper($newName), '"'); - $newParts = explode('_', $newName); + $newName = trim( strtoupper( $newName ), '"'); + $newParts = explode( '_', $newName ); $oldPrefix = ''; $newPrefix = ''; - for ($i = count($oldParts)-1; $i >= 0; $i--) { - if ($oldParts[$i] != $newParts[$i]) { - $oldPrefix = implode('_', $oldParts).'_'; - $newPrefix = implode('_', $newParts).'_'; + for ( $i = count( $oldParts ) - 1; $i >= 0; $i-- ) { + if ( $oldParts[$i] != $newParts[$i] ) { + $oldPrefix = implode( '_', $oldParts ) . '_'; + $newPrefix = implode( '_', $newParts ) . '_'; break; } - unset($oldParts[$i]); - unset($newParts[$i]); + unset( $oldParts[$i] ); + unset( $newParts[$i] ); } - $tabName = substr($oldName, strlen($oldPrefix)); + $tabName = substr( $oldName, strlen( $oldPrefix ) ); return $this->query( 'BEGIN DUPLICATE_TABLE(\'' . $tabName . '\', \'' . $oldPrefix . '\', \''.$newPrefix.'\', ' . $temporary . '); END;', $fname ); } @@ -854,21 +862,21 @@ class DatabaseOracle extends DatabaseBase { */ private function fieldInfoMulti( $table, $field ) { $tableWhere = ''; - $field = strtoupper($field); - if (is_array($table)) { + $field = strtoupper( $field ); + if ( is_array( $table ) ) { $table = array_map( array( &$this, 'tableName' ), $table ); $tableWhere = 'IN ('; - foreach($table as &$singleTable) { - $singleTable = strtoupper(trim( $singleTable, '"' )); - if (isset($this->mFieldInfoCache["$singleTable.$field"])) { + foreach( $table as &$singleTable ) { + $singleTable = strtoupper( trim( $singleTable, '"' ) ); + if ( isset( $this->mFieldInfoCache["$singleTable.$field"] ) ) { return $this->mFieldInfoCache["$singleTable.$field"]; } - $tableWhere .= '\''.$singleTable.'\','; + $tableWhere .= '\'' . $singleTable . '\','; } - $tableWhere = rtrim($tableWhere, ',').')'; + $tableWhere = rtrim( $tableWhere, ',' ) . ')'; } else { - $table = strtoupper(trim( $this->tableName($table), '"' )); - if (isset($this->mFieldInfoCache["$table.$field"])) { + $table = strtoupper( trim( $this->tableName( $table ), '"' ) ); + if ( isset( $this->mFieldInfoCache["$table.$field"] ) ) { return $this->mFieldInfoCache["$table.$field"]; } $tableWhere = '= \''.$table.'\''; @@ -881,9 +889,9 @@ class DatabaseOracle extends DatabaseBase { return false; } $res = new ORAResult( $this, $fieldInfoStmt ); - if ($res->numRows() == 0 ) { - if (is_array($table)) { - foreach($table as &$singleTable) { + if ( $res->numRows() == 0 ) { + if ( is_array( $table ) ) { + foreach( $table as &$singleTable ) { $this->mFieldInfoCache["$singleTable.$field"] = false; } } else { @@ -992,7 +1000,7 @@ class DatabaseOracle extends DatabaseBase { function setup_database() { $res = $this->sourceFile( "../maintenance/ora/tables.sql" ); - if ($res === true) { + if ( $res === true ) { print " done.\n"; } else { print " FAILED\n"; @@ -1007,7 +1015,7 @@ class DatabaseOracle extends DatabaseBase { } // do it like the postgres :D - $SQL = "INSERT INTO ".$this->tableName('interwiki')." (iw_prefix,iw_url,iw_local) VALUES "; + $SQL = "INSERT INTO " . $this->tableName( 'interwiki' ) . " (iw_prefix,iw_url,iw_local) VALUES "; while ( !feof( $f ) ) { $line = fgets( $f, 1024 ); $matches = array(); @@ -1040,7 +1048,7 @@ class DatabaseOracle extends DatabaseBase { global $wgContLang; $conds2 = array(); - $conds = ($conds != null && !is_array($conds)) ? array($conds) : $conds; + $conds = ( $conds != null && !is_array( $conds ) ) ? array( $conds ) : $conds; foreach ( $conds as $col => $val ) { $col_info = $this->fieldInfoMulti( $table, $col ); $col_type = $col_info != false ? $col_info->type() : 'CONSTANT'; @@ -1104,7 +1112,7 @@ class DatabaseOracle extends DatabaseBase { if ( $wgContLang != null ) { $conds2 = array(); - $conds = ($conds != null && !is_array($conds)) ? array($conds) : $conds; + $conds = ( $conds != null && !is_array( $conds ) ) ? array( $conds ) : $conds; foreach ( $conds as $col => $val ) { $col_info = $this->fieldInfoMulti( $table, $col ); $col_type = $col_info != false ? $col_info->type() : 'CONSTANT'; diff --git a/includes/db/DatabasePostgres.php b/includes/db/DatabasePostgres.php index 3ef1650e58..99e98746e4 100644 --- a/includes/db/DatabasePostgres.php +++ b/includes/db/DatabasePostgres.php @@ -34,21 +34,25 @@ AND attname=%s; SQL; $table = $db->tableName( $table ); - $res = $db->query(sprintf($q, - $db->addQuotes($wgDBmwschema), - $db->addQuotes($table), - $db->addQuotes($field))); - $row = $db->fetchObject($res); - if (!$row) + $res = $db->query( + sprintf( $q, + $db->addQuotes( $wgDBmwschema ), + $db->addQuotes( $table ), + $db->addQuotes( $field ) + ) + ); + $row = $db->fetchObject( $res ); + if ( !$row ) { return null; + } $n = new PostgresField; $n->type = $row->typname; - $n->nullable = ($row->attnotnull == 'f'); + $n->nullable = ( $row->attnotnull == 'f' ); $n->name = $field; $n->tablename = $table; $n->max_length = $row->attlen; - $n->deferrable = ($row->deferrable == 't'); - $n->deferred = ($row->deferred == 't'); + $n->deferrable = ( $row->deferrable == 't' ); + $n->deferred = ( $row->deferred == 't' ); $n->conname = $row->conname; return $n; } @@ -96,14 +100,12 @@ class DatabasePostgres extends DatabaseBase { var $numeric_version = null; var $mAffectedRows = null; - function __construct($server = false, $user = false, $password = false, $dbName = false, + function __construct( $server = false, $user = false, $password = false, $dbName = false, $failFunction = false, $flags = 0 ) { - $this->mFailFunction = $failFunction; $this->mFlags = $flags; - $this->open( $server, $user, $password, $dbName); - + $this->open( $server, $user, $password, $dbName ); } function getType() { @@ -138,10 +140,10 @@ class DatabasePostgres extends DatabaseBase { function hasConstraint( $name ) { global $wgDBmwschema; $SQL = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n WHERE c.connamespace = n.oid AND conname = '" . pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" . pg_escape_string( $this->mConn, $wgDBmwschema ) ."'"; - return $this->numRows($res = $this->doQuery($SQL)); + return $this->numRows( $res = $this->doQuery( $SQL ) ); } - static function newFromParams( $server, $user, $password, $dbName, $failFunction = false, $flags = 0) + static function newFromParams( $server, $user, $password, $dbName, $failFunction = false, $flags = 0 ) { return new DatabasePostgres( $server, $user, $password, $dbName, $failFunction, $flags ); } @@ -158,7 +160,7 @@ class DatabasePostgres extends DatabaseBase { global $wgDBport; - if (!strlen($user)) { ## e.g. the class is being loaded + if ( !strlen( $user ) ) { # e.g. the class is being loaded return; } $this->close(); @@ -171,11 +173,12 @@ class DatabasePostgres extends DatabaseBase { $connectVars = array( 'dbname' => $dbName, 'user' => $user, - 'password' => $password ); - if ($server!=false && $server!="") { + 'password' => $password + ); + if ( $server != false && $server != '' ) { $connectVars['host'] = $server; } - if ($port!=false && $port!="") { + if ( $port != false && $port != '' ) { $connectVars['port'] = $port; } $connectString = $this->makeConnectionString( $connectVars, PGSQL_CONNECT_FORCE_NEW ); @@ -187,7 +190,7 @@ class DatabasePostgres extends DatabaseBase { if ( !$this->mConn ) { wfDebug( "DB connection error\n" ); wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" ); - wfDebug( $this->lastError()."\n" ); + wfDebug( $this->lastError() . "\n" ); if ( !$this->mFailFunction ) { throw new DBConnectionError( $this, $phpError ); } else { @@ -198,21 +201,21 @@ class DatabasePostgres extends DatabaseBase { $this->mOpened = true; global $wgCommandLineMode; - ## If called from the command-line (e.g. importDump), only show errors - if ($wgCommandLineMode) { + # If called from the command-line (e.g. importDump), only show errors + if ( $wgCommandLineMode ) { $this->doQuery( "SET client_min_messages = 'ERROR'" ); } $this->doQuery( "SET client_encoding='UTF8'" ); global $wgDBmwschema, $wgDBts2schema; - if (isset( $wgDBmwschema ) && isset( $wgDBts2schema ) + if ( isset( $wgDBmwschema ) && isset( $wgDBts2schema ) && $wgDBmwschema !== 'mediawiki' && preg_match( '/^\w+$/', $wgDBmwschema ) && preg_match( '/^\w+$/', $wgDBts2schema ) ) { - $safeschema = $this->quote_ident($wgDBmwschema); - $safeschema2 = $this->quote_ident($wgDBts2schema); + $safeschema = $this->quote_ident( $wgDBmwschema ); + $safeschema2 = $this->quote_ident( $wgDBts2schema ); $this->doQuery( "SET search_path = $safeschema, $wgDBts2schema, public" ); } @@ -228,83 +231,81 @@ class DatabasePostgres extends DatabaseBase { } - function initial_setup($superuser, $password, $dbName) { + function initial_setup( $superuser, $password, $dbName ) { // If this is the initial connection, setup the schema stuff and possibly create the user global $wgDBname, $wgDBuser, $wgDBpassword, $wgDBmwschema, $wgDBts2schema; - print "
  • Checking the version of Postgres..."; + print '
  • Checking the version of Postgres...'; $version = $this->getServerVersion(); $PGMINVER = '8.1'; - if ($version < $PGMINVER) { + if ( $version < $PGMINVER ) { print "FAILED. Required version is $PGMINVER. You have " . htmlspecialchars( $version ) . "
  • \n"; - dieout(""); + dieout( '' ); } - print "version " . htmlspecialchars( $this->numeric_version ) . " is OK.\n"; + print 'version ' . htmlspecialchars( $this->numeric_version ) . " is OK.\n"; - $safeuser = $this->quote_ident($wgDBuser); + $safeuser = $this->quote_ident( $wgDBuser ); // Are we connecting as a superuser for the first time? - if ($superuser) { + if ( $superuser ) { // Are we really a superuser? Check out our rights $SQL = "SELECT CASE WHEN usesuper IS TRUE THEN CASE WHEN usecreatedb IS TRUE THEN 3 ELSE 1 END ELSE CASE WHEN usecreatedb IS TRUE THEN 2 ELSE 0 END END AS rights - FROM pg_catalog.pg_user WHERE usename = " . $this->addQuotes($superuser); - $rows = $this->numRows($res = $this->doQuery($SQL)); - if (!$rows) { - print "
  • ERROR: Could not read permissions for user \"" . htmlspecialchars( $superuser ) . "\"
  • \n"; - dieout(''); + FROM pg_catalog.pg_user WHERE usename = " . $this->addQuotes( $superuser ); + $rows = $this->numRows( $res = $this->doQuery( $SQL ) ); + if ( !$rows ) { + print '
  • ERROR: Could not read permissions for user "' . htmlspecialchars( $superuser ) . "\"
  • \n"; + dieout( '' ); } - $perms = pg_fetch_result($res, 0, 0); + $perms = pg_fetch_result( $res, 0, 0 ); - $SQL = "SELECT 1 FROM pg_catalog.pg_user WHERE usename = " . $this->addQuotes($wgDBuser); - $rows = $this->numRows($this->doQuery($SQL)); - if ($rows) { - print "
  • User \"" . htmlspecialchars( $wgDBuser ) . "\" already exists, skipping account creation.
  • "; - } - else { - if ($perms != 1 and $perms != 3) { - print "
  • ERROR: the user \"" . htmlspecialchars( $superuser ) . "\" cannot create other users. "; + $SQL = "SELECT 1 FROM pg_catalog.pg_user WHERE usename = " . $this->addQuotes( $wgDBuser ); + $rows = $this->numRows( $this->doQuery( $SQL ) ); + if ( $rows ) { + print '
  • User "' . htmlspecialchars( $wgDBuser ) . '" already exists, skipping account creation.
  • '; + } else { + if ( $perms != 1 && $perms != 3 ) { + print '
  • ERROR: the user "' . htmlspecialchars( $superuser ) . '" cannot create other users. '; print 'Please use a different Postgres user.
  • '; - dieout(''); + dieout( '' ); } - print "
  • Creating user " . htmlspecialchars( $wgDBuser ) . "..."; - $safepass = $this->addQuotes($wgDBpassword); + print '
  • Creating user ' . htmlspecialchars( $wgDBuser ) . '...'; + $safepass = $this->addQuotes( $wgDBpassword ); $SQL = "CREATE USER $safeuser NOCREATEDB PASSWORD $safepass"; - $this->doQuery($SQL); + $this->doQuery( $SQL ); print "OK
  • \n"; } // User now exists, check out the database - if ($dbName != $wgDBname) { - $SQL = "SELECT 1 FROM pg_catalog.pg_database WHERE datname = " . $this->addQuotes($wgDBname); - $rows = $this->numRows($this->doQuery($SQL)); - if ($rows) { - print "
  • Database \"" . htmlspecialchars( $wgDBname ) . "\" already exists, skipping database creation.
  • "; - } - else { - if ($perms < 1) { - print "
  • ERROR: the user \"" . htmlspecialchars( $superuser ) . "\" cannot create databases. "; + if ( $dbName != $wgDBname ) { + $SQL = "SELECT 1 FROM pg_catalog.pg_database WHERE datname = " . $this->addQuotes( $wgDBname ); + $rows = $this->numRows( $this->doQuery( $SQL ) ); + if ( $rows ) { + print '
  • Database "' . htmlspecialchars( $wgDBname ) . '" already exists, skipping database creation.
  • '; + } else { + if ( $perms < 1 ) { + print '
  • ERROR: the user "' . htmlspecialchars( $superuser ) . '" cannot create databases. '; print 'Please use a different Postgres user.
  • '; - dieout(''); + dieout( '' ); } - print "
  • Creating database " . htmlspecialchars( $wgDBname ) . "..."; - $safename = $this->quote_ident($wgDBname); + print '
  • Creating database ' . htmlspecialchars( $wgDBname ) . '...'; + $safename = $this->quote_ident( $wgDBname ); $SQL = "CREATE DATABASE $safename OWNER $safeuser "; - $this->doQuery($SQL); + $this->doQuery( $SQL ); print "OK
  • \n"; // Hopefully tsearch2 and plpgsql are in template1... } // Reconnect to check out tsearch2 rights for this user - print "
  • Connecting to \"" . htmlspecialchars( $wgDBname ) . "\" as superuser \"" . - htmlspecialchars( $superuser ) . "\" to check rights..."; + print '
  • Connecting to "' . htmlspecialchars( $wgDBname ) . '" as superuser "' . + htmlspecialchars( $superuser ) . '" to check rights...'; $connectVars = array(); - if ($this->mServer!=false && $this->mServer!="") { + if ( $this->mServer != false && $this->mServer != '' ) { $connectVars['host'] = $this->mServer; } - if ($this->mPort!=false && $this->mPort!="") { + if ( $this->mPort != false && $this->mPort != '' ) { $connectVars['port'] = $this->mPort; } $connectVars['dbname'] = $wgDBname; @@ -314,47 +315,46 @@ class DatabasePostgres extends DatabaseBase { @$this->mConn = pg_connect( $this->makeConnectionString( $connectVars ) ); if ( !$this->mConn ) { print "FAILED TO CONNECT!
  • "; - dieout(""); + dieout( '' ); } print "OK\n"; } - if ($this->numeric_version < 8.3) { + if ( $this->numeric_version < 8.3 ) { // Tsearch2 checks - print "
  • Checking that tsearch2 is installed in the database \"" . - htmlspecialchars( $wgDBname ) . "\"..."; - if (! $this->tableExists("pg_ts_cfg", $wgDBts2schema)) { - print "FAILED. tsearch2 must be installed in the database \"" . - htmlspecialchars( $wgDBname ) . "\"."; - print "Please see this article"; + print '
  • Checking that tsearch2 is installed in the database "' . + htmlspecialchars( $wgDBname ) . '"...'; + if ( !$this->tableExists( 'pg_ts_cfg', $wgDBts2schema ) ) { + print 'FAILED. tsearch2 must be installed in the database "' . + htmlspecialchars( $wgDBname ) . '".'; + print 'Please see this article'; print " for instructions or ask on #postgresql on irc.freenode.net
  • \n"; - dieout(""); + dieout( '' ); } print "OK\n"; - print "
  • Ensuring that user \"" . htmlspecialchars( $wgDBuser ) . - "\" has select rights on the tsearch2 tables..."; - foreach (array('cfg','cfgmap','dict','parser') as $table) { + print '
  • Ensuring that user "' . htmlspecialchars( $wgDBuser ) . + '" has select rights on the tsearch2 tables...'; + foreach ( array( 'cfg', 'cfgmap', 'dict', 'parser' ) as $table ) { $SQL = "GRANT SELECT ON pg_ts_$table TO $safeuser"; - $this->doQuery($SQL); + $this->doQuery( $SQL ); } print "OK
  • \n"; } // Setup the schema for this user if needed - $result = $this->schemaExists($wgDBmwschema); - $safeschema = $this->quote_ident($wgDBmwschema); - if (!$result) { - print "
  • Creating schema " . htmlspecialchars( $wgDBmwschema ) . " ..."; - $result = $this->doQuery("CREATE SCHEMA $safeschema AUTHORIZATION $safeuser"); - if (!$result) { + $result = $this->schemaExists( $wgDBmwschema ); + $safeschema = $this->quote_ident( $wgDBmwschema ); + if ( !$result ) { + print '
  • Creating schema ' . htmlspecialchars( $wgDBmwschema ) . ' ...'; + $result = $this->doQuery( "CREATE SCHEMA $safeschema AUTHORIZATION $safeuser" ); + if ( !$result ) { print "FAILED.
  • \n"; - dieout(""); + dieout( '' ); } print "OK\n"; - } - else { + } else { print "
  • Schema already exists, explicitly granting rights...\n"; - $safeschema2 = $this->addQuotes($wgDBmwschema); + $safeschema2 = $this->addQuotes( $wgDBmwschema ); $SQL = "SELECT 'GRANT ALL ON '||pg_catalog.quote_ident(relname)||' TO $safeuser;'\n". "FROM pg_catalog.pg_class p, pg_catalog.pg_namespace n\n". "WHERE relnamespace = n.oid AND n.nspname = $safeschema2\n". @@ -364,16 +364,16 @@ class DatabasePostgres extends DatabaseBase { "pg_catalog.oidvectortypes(p.proargtypes)||') TO $safeuser;'\n". "FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n\n". "WHERE p.pronamespace = n.oid AND n.nspname = $safeschema2"; - $res = $this->doQuery($SQL); - if (!$res) { + $res = $this->doQuery( $SQL ); + if ( !$res ) { print "FAILED. Could not set rights for the user.
  • \n"; - dieout(""); + dieout( '' ); } - $this->doQuery("SET search_path = $safeschema"); - $rows = $this->numRows($res); - while ($rows) { + $this->doQuery( "SET search_path = $safeschema" ); + $rows = $this->numRows( $res ); + while ( $rows ) { $rows--; - $this->doQuery(pg_fetch_result($res, $rows, 0)); + $this->doQuery( pg_fetch_result( $res, $rows, 0 ) ); } print "OK"; } @@ -386,207 +386,203 @@ class DatabasePostgres extends DatabaseBase { } // end superuser - if (!defined('POSTGRES_SEARCHPATH')) { + if ( !defined( 'POSTGRES_SEARCHPATH' ) ) { - if ($this->numeric_version < 8.3) { + if ( $this->numeric_version < 8.3 ) { // Do we have the basic tsearch2 table? - print "
  • Checking for tsearch2 in the schema \"" . htmlspecialchars( $wgDBts2schema ) . "\"..."; - if (! $this->tableExists("pg_ts_dict", $wgDBts2schema)) { - print "FAILED. Make sure tsearch2 is installed. See this article"; + print '
  • Checking for tsearch2 in the schema "' . htmlspecialchars( $wgDBts2schema ) . '"...'; + if ( !$this->tableExists( 'pg_ts_dict', $wgDBts2schema ) ) { + print 'FAILED. Make sure tsearch2 is installed. See this article'; print " for instructions.
  • \n"; - dieout(""); + dieout( '' ); } print "OK\n"; // Does this user have the rights to the tsearch2 tables? - $ctype = pg_fetch_result($this->doQuery("SHOW lc_ctype"),0,0); - print "
  • Checking tsearch2 permissions..."; + $ctype = pg_fetch_result( $this->doQuery( 'SHOW lc_ctype' ), 0, 0 ); + print '
  • Checking tsearch2 permissions...'; // Let's check all four, just to be safe error_reporting( 0 ); - $ts2tables = array('cfg','cfgmap','dict','parser'); - $safetsschema = $this->quote_ident($wgDBts2schema); - foreach ( $ts2tables AS $tname ) { + $ts2tables = array( 'cfg', 'cfgmap', 'dict', 'parser' ); + $safetsschema = $this->quote_ident( $wgDBts2schema ); + foreach ( $ts2tables as $tname ) { $SQL = "SELECT count(*) FROM $safetsschema.pg_ts_$tname"; - $res = $this->doQuery($SQL); - if (!$res) { + $res = $this->doQuery( $SQL ); + if ( !$res ) { print "FAILED to access " . htmlspecialchars( "pg_ts_$tname" ) . ". Make sure that the user \"". htmlspecialchars( $wgDBuser ) . "\" has SELECT access to all four tsearch2 tables
  • \n"; - dieout(""); + dieout( '' ); } } $SQL = "SELECT ts_name FROM $safetsschema.pg_ts_cfg WHERE locale = " . $this->addQuotes( $ctype ) ; $SQL .= " ORDER BY CASE WHEN ts_name <> 'default' THEN 1 ELSE 0 END"; - $res = $this->doQuery($SQL); + $res = $this->doQuery( $SQL ); error_reporting( E_ALL ); - if (!$res) { + if ( !$res ) { print "FAILED. Could not determine the tsearch2 locale information\n"; dieout(""); } - print "OK"; + print 'OK'; // Will the current locale work? Can we force it to? - print "
  • Verifying tsearch2 locale with " . htmlspecialchars( $ctype ) . "..."; - $rows = $this->numRows($res); + print '
  • Verifying tsearch2 locale with ' . htmlspecialchars( $ctype ) . '...'; + $rows = $this->numRows( $res ); $resetlocale = 0; - if (!$rows) { + if ( !$rows ) { print "not found
  • \n"; - print "
  • Attempting to set default tsearch2 locale to \"" . htmlspecialchars( $ctype ) . "\"..."; + print '
  • Attempting to set default tsearch2 locale to "' . htmlspecialchars( $ctype ) . '"...'; $resetlocale = 1; - } - else { - $tsname = pg_fetch_result($res, 0, 0); - if ($tsname != 'default') { + } else { + $tsname = pg_fetch_result( $res, 0, 0 ); + if ( $tsname != 'default' ) { print "not set to default (" . htmlspecialchars( $tsname ) . ")"; print "
  • Attempting to change tsearch2 default locale to \"" . htmlspecialchars( $ctype ) . "\"..."; $resetlocale = 1; } } - if ($resetlocale) { + if ( $resetlocale ) { $SQL = "UPDATE $safetsschema.pg_ts_cfg SET locale = " . $this->addQuotes( $ctype ) . " WHERE ts_name = 'default'"; - $res = $this->doQuery($SQL); - if (!$res) { - print "FAILED. "; - print "Please make sure that the locale in pg_ts_cfg for \"default\" is set to \"" . + $res = $this->doQuery( $SQL ); + if ( !$res ) { + print 'FAILED. '; + print 'Please make sure that the locale in pg_ts_cfg for "default" is set to "' . htmlspecialchars( $ctype ) . "\"
  • \n"; - dieout(""); + dieout( '' ); } - print "OK"; + print 'OK'; } // Final test: try out a simple tsearch2 query $SQL = "SELECT $safetsschema.to_tsvector('default','MediaWiki tsearch2 testing')"; - $res = $this->doQuery($SQL); - if (!$res) { - print "FAILED. Specifically, \"" . htmlspecialchars( $SQL ) . "\" did not work."; - dieout(""); + $res = $this->doQuery( $SQL ); + if ( !$res ) { + print 'FAILED. Specifically, "' . htmlspecialchars( $SQL ) . '" did not work.'; + dieout( '' ); } - print "OK"; + print 'OK'; } // Install plpgsql if needed $this->setup_plpgsql(); // Does the schema already exist? Who owns it? - $result = $this->schemaExists($wgDBmwschema); - if (!$result) { - print "
  • Creating schema " . htmlspecialchars( $wgDBmwschema ) . " ..."; + $result = $this->schemaExists( $wgDBmwschema ); + if ( !$result ) { + print '
  • Creating schema ' . htmlspecialchars( $wgDBmwschema ) . ' ...'; error_reporting( 0 ); - $safeschema = $this->quote_ident($wgDBmwschema); - $result = $this->doQuery("CREATE SCHEMA $safeschema"); + $safeschema = $this->quote_ident( $wgDBmwschema ); + $result = $this->doQuery( "CREATE SCHEMA $safeschema" ); error_reporting( E_ALL ); - if (!$result) { - print "FAILED. The user \"" . htmlspecialchars( $wgDBuser ) . - "\" must be able to access the schema. ". - "You can try making them the owner of the database, or try creating the schema with a ". - "different user, and then grant access to the \"" . + if ( !$result ) { + print 'FAILED. The user "' . htmlspecialchars( $wgDBuser ) . + '" must be able to access the schema. '. + 'You can try making them the owner of the database, or try creating the schema with a '. + 'different user, and then grant access to the "' . htmlspecialchars( $wgDBuser ) . "\" user.
  • \n"; - dieout(""); + dieout( '' ); } print "OK\n"; - } - else if ($result != $wgDBuser) { - print "
  • Schema \"" . htmlspecialchars( $wgDBmwschema ) . "\" exists but is not owned by \"" . + } elseif ( $result != $wgDBuser ) { + print '
  • Schema "' . htmlspecialchars( $wgDBmwschema ) . '" exists but is not owned by "' . htmlspecialchars( $wgDBuser ) . "\". Not ideal.
  • \n"; - } - else { - print "
  • Schema \"" . htmlspecialchars( $wgDBmwschema ) . "\" exists and is owned by \"" . + } else { + print '
  • Schema "' . htmlspecialchars( $wgDBmwschema ) . '" exists and is owned by "' . htmlspecialchars( $wgDBuser ) . "\". Excellent.
  • \n"; } // Always return GMT time to accomodate the existing integer-based timestamp assumption - print "
  • Setting the timezone to GMT for user \"" . htmlspecialchars( $wgDBuser ) . "\" ..."; + print "
  • Setting the timezone to GMT for user \"" . htmlspecialchars( $wgDBuser ) . '" ...'; $SQL = "ALTER USER $safeuser SET timezone = 'GMT'"; - $result = pg_query($this->mConn, $SQL); - if (!$result) { + $result = pg_query( $this->mConn, $SQL ); + if ( !$result ) { print "FAILED.
  • \n"; - dieout(""); + dieout( '' ); } print "OK\n"; // Set for the rest of this session $SQL = "SET timezone = 'GMT'"; - $result = pg_query($this->mConn, $SQL); - if (!$result) { + $result = pg_query( $this->mConn, $SQL ); + if ( !$result ) { print "
  • Failed to set timezone
  • \n"; - dieout(""); + dieout( '' ); } - print "
  • Setting the datestyle to ISO, YMD for user \"" . htmlspecialchars( $wgDBuser ) . "\" ..."; + print '
  • Setting the datestyle to ISO, YMD for user "' . htmlspecialchars( $wgDBuser ) . '" ...'; $SQL = "ALTER USER $safeuser SET datestyle = 'ISO, YMD'"; - $result = pg_query($this->mConn, $SQL); - if (!$result) { + $result = pg_query( $this->mConn, $SQL ); + if ( !$result ) { print "FAILED.
  • \n"; - dieout(""); + dieout( '' ); } print "OK\n"; // Set for the rest of this session $SQL = "SET datestyle = 'ISO, YMD'"; - $result = pg_query($this->mConn, $SQL); - if (!$result) { + $result = pg_query( $this->mConn, $SQL ); + if ( !$result ) { print "
  • Failed to set datestyle
  • \n"; - dieout(""); + dieout( '' ); } // Fix up the search paths if needed - print "
  • Setting the search path for user \"" . htmlspecialchars( $wgDBuser ) . "\" ..."; - $path = $this->quote_ident($wgDBmwschema); - if ($wgDBts2schema !== $wgDBmwschema) - $path .= ", ". $this->quote_ident($wgDBts2schema); - if ($wgDBmwschema !== 'public' and $wgDBts2schema !== 'public') - $path .= ", public"; + print '
  • Setting the search path for user "' . htmlspecialchars( $wgDBuser ) . '" ...'; + $path = $this->quote_ident( $wgDBmwschema ); + if ( $wgDBts2schema !== $wgDBmwschema ) { + $path .= ', '. $this->quote_ident( $wgDBts2schema ); + } + if ( $wgDBmwschema !== 'public' && $wgDBts2schema !== 'public' ) { + $path .= ', public'; + } $SQL = "ALTER USER $safeuser SET search_path = $path"; - $result = pg_query($this->mConn, $SQL); - if (!$result) { + $result = pg_query( $this->mConn, $SQL ); + if ( !$result ) { print "FAILED.
  • \n"; - dieout(""); + dieout( '' ); } print "OK\n"; // Set for the rest of this session $SQL = "SET search_path = $path"; - $result = pg_query($this->mConn, $SQL); - if (!$result) { + $result = pg_query( $this->mConn, $SQL ); + if ( !$result ) { print "
  • Failed to set search_path
  • \n"; - dieout(""); + dieout( '' ); } - define( "POSTGRES_SEARCHPATH", $path ); + define( 'POSTGRES_SEARCHPATH', $path ); } } - function setup_plpgsql() { - print "
  • Checking for PL/pgSQL ..."; + print '
  • Checking for PL/pgSQL ...'; $SQL = "SELECT 1 FROM pg_catalog.pg_language WHERE lanname = 'plpgsql'"; - $rows = $this->numRows($this->doQuery($SQL)); - if ($rows < 1) { + $rows = $this->numRows( $this->doQuery( $SQL ) ); + if ( $rows < 1 ) { // plpgsql is not installed, but if we have a pg_pltemplate table, we should be able to create it - print "not installed. Attempting to install PL/pgSQL ..."; + print 'not installed. Attempting to install PL/pgSQL ...'; $SQL = "SELECT 1 FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace) ". "WHERE relname = 'pg_pltemplate' AND nspname='pg_catalog'"; - $rows = $this->numRows($this->doQuery($SQL)); + $rows = $this->numRows( $this->doQuery( $SQL ) ); global $wgDBname; - if ($rows >= 1) { - $olde = error_reporting(0); - error_reporting($olde - E_WARNING); - $result = $this->doQuery("CREATE LANGUAGE plpgsql"); - error_reporting($olde); - if (!$result) { - print "FAILED. You need to install the language PL/pgSQL in the database " . - htmlspecialchars( $wgDBname ) . "
  • "; - dieout(""); + if ( $rows >= 1 ) { + $olde = error_reporting( 0 ); + error_reporting( $olde - E_WARNING ); + $result = $this->doQuery( 'CREATE LANGUAGE plpgsql' ); + error_reporting( $olde ); + if ( !$result ) { + print 'FAILED. You need to install the language PL/pgSQL in the database ' . + htmlspecialchars( $wgDBname ) . ''; + dieout( '' ); } - } - else { - print "FAILED. You need to install the language PL/pgSQL in the database " . - htmlspecialchars( $wgDBname ) . ""; - dieout(""); + } else { + print 'FAILED. You need to install the language PL/pgSQL in the database ' . + htmlspecialchars( $wgDBname ) . ''; + dieout( '' ); } } print "OK\n"; } - /** * Closes a database connection, if it is open * Returns success, true if already closed @@ -601,10 +597,10 @@ class DatabasePostgres extends DatabaseBase { } function doQuery( $sql ) { - if (function_exists('mb_convert_encoding')) { - $sql = mb_convert_encoding($sql,'UTF-8'); + if ( function_exists( 'mb_convert_encoding' ) ) { + $sql = mb_convert_encoding( $sql, 'UTF-8' ); } - $this->mLastResult = pg_query( $this->mConn, $sql); + $this->mLastResult = pg_query( $this->mConn, $sql ); $this->mAffectedRows = null; // use pg_affected_rows(mLastResult) return $this->mLastResult; } @@ -618,7 +614,7 @@ class DatabasePostgres extends DatabaseBase { $res = $res->result; } if ( !@pg_free_result( $res ) ) { - throw new DBUnexpectedError($this, "Unable to free Postgres result\n" ); + throw new DBUnexpectedError( $this, "Unable to free Postgres result\n" ); } } @@ -632,8 +628,8 @@ class DatabasePostgres extends DatabaseBase { # TODO: # hashar : not sure if the following test really trigger if the object # fetching failed. - if( pg_last_error($this->mConn) ) { - throw new DBUnexpectedError($this, 'SQL error: ' . htmlspecialchars( pg_last_error($this->mConn) ) ); + if( pg_last_error( $this->mConn ) ) { + throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) ); } return $row; } @@ -643,8 +639,8 @@ class DatabasePostgres extends DatabaseBase { $res = $res->result; } @$row = pg_fetch_array( $res ); - if( pg_last_error($this->mConn) ) { - throw new DBUnexpectedError($this, 'SQL error: ' . htmlspecialchars( pg_last_error($this->mConn) ) ); + if( pg_last_error( $this->mConn ) ) { + throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) ); } return $row; } @@ -654,17 +650,19 @@ class DatabasePostgres extends DatabaseBase { $res = $res->result; } @$n = pg_num_rows( $res ); - if( pg_last_error($this->mConn) ) { - throw new DBUnexpectedError($this, 'SQL error: ' . htmlspecialchars( pg_last_error($this->mConn) ) ); + if( pg_last_error( $this->mConn ) ) { + throw new DBUnexpectedError( $this, 'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) ) ); } return $n; } + function numFields( $res ) { if ( $res instanceof ResultWrapper ) { $res = $res->result; } return pg_num_fields( $res ); } + function fieldName( $res, $n ) { if ( $res instanceof ResultWrapper ) { $res = $res->result; @@ -689,9 +687,8 @@ class DatabasePostgres extends DatabaseBase { function lastError() { if ( $this->mConn ) { return pg_last_error(); - } - else { - return "No database connection"; + } else { + return 'No database connection'; } } function lastErrno() { @@ -703,8 +700,9 @@ class DatabasePostgres extends DatabaseBase { // Forced result for simulated queries return $this->mAffectedRows; } - if( empty( $this->mLastResult ) ) + if( empty( $this->mLastResult ) ) { return 0; + } return pg_affected_rows( $this->mLastResult ); } @@ -715,8 +713,7 @@ class DatabasePostgres extends DatabaseBase { * Returns -1 if count cannot be found * Takes same arguments as Database::select() */ - - function estimateRowCount( $table, $vars='*', $conds='', $fname = 'DatabasePostgres::estimateRowCount', $options = array() ) { + function estimateRowCount( $table, $vars = '*', $conds='', $fname = 'DatabasePostgres::estimateRowCount', $options = array() ) { $options['EXPLAIN'] = true; $res = $this->select( $table, $vars, $conds, $fname, $options ); $rows = -1; @@ -730,7 +727,6 @@ class DatabasePostgres extends DatabaseBase { return $rows; } - /** * Returns information about an index * If errors are explicitly ignored, returns NULL on failure @@ -749,16 +745,18 @@ class DatabasePostgres extends DatabaseBase { return false; } - function indexUnique ($table, $index, $fname = 'DatabasePostgres::indexUnique' ) { + function indexUnique( $table, $index, $fname = 'DatabasePostgres::indexUnique' ) { $sql = "SELECT indexname FROM pg_indexes WHERE tablename='{$table}'". " AND indexdef LIKE 'CREATE UNIQUE%(" . $this->strencode( $this->indexName( $index ) ) . ")'"; $res = $this->query( $sql, $fname ); - if ( !$res ) + if ( !$res ) { return null; - while ($row = $this->fetchObject( $res )) + } + while ( $row = $this->fetchObject( $res ) ) { return true; + } return false; } @@ -786,14 +784,14 @@ class DatabasePostgres extends DatabaseBase { $this->getServerVersion(); } - if ( !is_array( $options ) ) + if ( !is_array( $options ) ) { $options = array( $options ); + } if ( isset( $args[0] ) && is_array( $args[0] ) ) { $multi = true; $keys = array_keys( $args[0] ); - } - else { + } else { $multi = false; $keys = array_keys( $args ); } @@ -804,7 +802,7 @@ class DatabasePostgres extends DatabaseBase { // If we are not in a transaction, we need to be for savepoint trickery $didbegin = 0; if ( $ignore ) { - if (! $this->mTrxLevel) { + if ( !$this->mTrxLevel ) { $this->begin(); $didbegin = 1; } @@ -828,8 +826,7 @@ class DatabasePostgres extends DatabaseBase { $sql .= '(' . $this->makeList( $row ) . ')'; } $res = (bool)$this->query( $sql, $fname, $ignore ); - } - else { + } else { $res = true; $origsql = $sql; foreach ( $args as $row ) { @@ -837,17 +834,16 @@ class DatabasePostgres extends DatabaseBase { $tempsql .= '(' . $this->makeList( $row ) . ')'; if ( $ignore ) { - pg_query($this->mConn, "SAVEPOINT $ignore"); + pg_query( $this->mConn, "SAVEPOINT $ignore" ); } $tempres = (bool)$this->query( $tempsql, $fname, $ignore ); if ( $ignore ) { $bar = pg_last_error(); - if ($bar != false) { + if ( $bar != false ) { pg_query( $this->mConn, "ROLLBACK TO $ignore" ); - } - else { + } else { pg_query( $this->mConn, "RELEASE $ignore" ); $numrowsinserted++; } @@ -855,12 +851,12 @@ class DatabasePostgres extends DatabaseBase { // If any of them fail, we fail overall for this function call // Note that this will be ignored if IGNORE is set - if (! $tempres) + if ( !$tempres ) { $res = false; + } } } - } - else { + } else { // Not multi, just a lone insert if ( $ignore ) { pg_query($this->mConn, "SAVEPOINT $ignore"); @@ -870,10 +866,9 @@ class DatabasePostgres extends DatabaseBase { $res = (bool)$this->query( $sql, $fname, $ignore ); if ( $ignore ) { $bar = pg_last_error(); - if ($bar != false) { + if ( $bar != false ) { pg_query( $this->mConn, "ROLLBACK TO $ignore" ); - } - else { + } else { pg_query( $this->mConn, "RELEASE $ignore" ); $numrowsinserted++; } @@ -881,7 +876,7 @@ class DatabasePostgres extends DatabaseBase { } if ( $ignore ) { $olde = error_reporting( $olde ); - if ($didbegin) { + if ( $didbegin ) { $this->commit(); } @@ -892,9 +887,7 @@ class DatabasePostgres extends DatabaseBase { return true; } - return $res; - } /** @@ -904,7 +897,7 @@ class DatabasePostgres extends DatabaseBase { * $conds may be "*" to copy the whole table * srcTable may be an array of tables. * @todo FIXME: implement this a little better (seperate select/insert)? - */ + */ function insertSelect( $destTable, $srcTable, $varMap, $conds, $fname = 'DatabasePostgres::insertSelect', $insertOptions = array(), $selectOptions = array() ) { @@ -942,7 +935,7 @@ class DatabasePostgres extends DatabaseBase { " SELECT $startOpts " . implode( ',', $varMap ) . " FROM $srcTable $useIndex"; - if ( $conds != '*') { + if ( $conds != '*' ) { $sql .= ' WHERE ' . $this->makeList( $conds, LIST_AND ); } @@ -1006,19 +999,21 @@ class DatabasePostgres extends DatabaseBase { return $currval; } - # REPLACE query wrapper - # Postgres simulates this with a DELETE followed by INSERT - # $row is the row to insert, an associative array - # $uniqueIndexes is an array of indexes. Each element may be either a - # field name or an array of field names - # - # It may be more efficient to leave off unique indexes which are unlikely to collide. - # However if you do this, you run the risk of encountering errors which wouldn't have - # occurred in MySQL + /** + * REPLACE query wrapper + * Postgres simulates this with a DELETE followed by INSERT + * $row is the row to insert, an associative array + * $uniqueIndexes is an array of indexes. Each element may be either a + * field name or an array of field names + * + * It may be more efficient to leave off unique indexes which are unlikely to collide. + * However if you do this, you run the risk of encountering errors which wouldn't have + * occurred in MySQL + */ function replace( $table, $uniqueIndexes, $rows, $fname = 'DatabasePostgres::replace' ) { $table = $this->tableName( $table ); - if (count($rows)==0) { + if ( count( $rows ) == 0 ) { return; } @@ -1035,7 +1030,7 @@ class DatabasePostgres extends DatabaseBase { foreach ( $uniqueIndexes as $index ) { if ( $first ) { $first = false; - $sql .= "("; + $sql .= '('; } else { $sql .= ') OR ('; } @@ -1067,7 +1062,7 @@ class DatabasePostgres extends DatabaseBase { # DELETE where the condition is a join function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname = 'DatabasePostgres::deleteJoin' ) { if ( !$conds ) { - throw new DBUnexpectedError($this, 'Database::deleteJoin() called with empty $conds' ); + throw new DBUnexpectedError( $this, 'DatabasePostgres::deleteJoin() called with empty $conds' ); } $delTable = $this->tableName( $delTable ); @@ -1088,18 +1083,18 @@ class DatabasePostgres extends DatabaseBase { FROM pg_class c, pg_attribute a, pg_type t WHERE relname='$table' AND a.attrelid=c.oid AND a.atttypid=t.oid and a.attname='$field'"; - $res =$this->query($sql); - $row=$this->fetchObject($res); - if ($row->ftype=="varchar") { - $size=$row->size-4; + $res =$this->query( $sql ); + $row = $this->fetchObject( $res ); + if ( $row->ftype == 'varchar' ) { + $size = $row->size - 4; } else { - $size=$row->size; + $size = $row->size; } return $size; } - function limitResult($sql, $limit, $offset=false) { - return "$sql LIMIT $limit ".(is_numeric($offset)?" OFFSET {$offset} ":""); + function limitResult( $sql, $limit, $offset = false ) { + return "$sql LIMIT $limit " . ( is_numeric( $offset ) ? " OFFSET {$offset} " : '' ); } function wasDeadlock() { @@ -1110,33 +1105,31 @@ class DatabasePostgres extends DatabaseBase { return $this->query( 'CREATE ' . ( $temporary ? 'TEMPORARY ' : '' ) . " TABLE $newName (LIKE $oldName INCLUDING DEFAULTS)", $fname ); } - function timestamp( $ts=0 ) { - return wfTimestamp(TS_POSTGRES,$ts); + function timestamp( $ts = 0 ) { + return wfTimestamp( TS_POSTGRES, $ts ); } /** * Return aggregated value function call */ - function aggregateValue ($valuedata,$valuename='value') { + function aggregateValue( $valuedata, $valuename = 'value' ) { return $valuedata; } - function reportQueryError( $error, $errno, $sql, $fname, $tempIgnore = false ) { // Ignore errors during error handling to avoid infinite recursion $ignore = $this->ignoreErrors( true ); $this->mErrorCount++; - if ($ignore || $tempIgnore) { - wfDebug("SQL ERROR (ignored): $error\n"); + if ( $ignore || $tempIgnore ) { + wfDebug( "SQL ERROR (ignored): $error\n" ); $this->ignoreErrors( $ignore ); - } - else { + } else { $message = "A database error has occurred. Did you forget to run maintenance/update.php after upgrading? See: http://www.mediawiki.org/wiki/Manual:Upgrading#Run_the_update_script\n" . "Query: $sql\n" . "Function: $fname\n" . "Error: $errno $error\n"; - throw new DBUnexpectedError($this, $message); + throw new DBUnexpectedError( $this, $message ); } } @@ -1144,7 +1137,7 @@ class DatabasePostgres extends DatabaseBase { * @return string wikitext of a link to the server software's web site */ public static function getSoftwareLink() { - return "[http://www.postgresql.org/ PostgreSQL]"; + return '[http://www.postgresql.org/ PostgreSQL]'; } /** @@ -1173,21 +1166,23 @@ class DatabasePostgres extends DatabaseBase { */ function relationExists( $table, $types, $schema = false ) { global $wgDBmwschema; - if ( !is_array( $types ) ) + if ( !is_array( $types ) ) { $types = array( $types ); - if ( !$schema ) + } + if ( !$schema ) { $schema = $wgDBmwschema; + } $etable = $this->addQuotes( $table ); $eschema = $this->addQuotes( $schema ); $SQL = "SELECT 1 FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n " . "WHERE c.relnamespace = n.oid AND c.relname = $etable AND n.nspname = $eschema " - . "AND c.relkind IN ('" . implode("','", $types) . "')"; + . "AND c.relkind IN ('" . implode( "','", $types ) . "')"; $res = $this->query( $SQL ); $count = $res ? $res->numRows() : 0; return $count ? true : false; } - /* + /** * For backward compatibility, this function checks both tables and * views. */ @@ -1208,35 +1203,45 @@ class DatabasePostgres extends DatabaseBase { AND tgrelid=pg_class.oid AND nspname=%s AND relname=%s AND tgname=%s SQL; - $res = $this->query(sprintf($q, - $this->addQuotes($wgDBmwschema), - $this->addQuotes($table), - $this->addQuotes($trigger))); - if (!$res) + $res = $this->query( + sprintf( + $q, + $this->addQuotes( $wgDBmwschema ), + $this->addQuotes( $table ), + $this->addQuotes( $trigger ) + ) + ); + if ( !$res ) { return null; + } $rows = $res->numRows(); return $rows; } function ruleExists( $table, $rule ) { global $wgDBmwschema; - $exists = $this->selectField("pg_rules", "rulename", - array( "rulename" => $rule, - "tablename" => $table, - "schemaname" => $wgDBmwschema ) ); + $exists = $this->selectField( 'pg_rules', 'rulename', + array( + 'rulename' => $rule, + 'tablename' => $table, + 'schemaname' => $wgDBmwschema + ) + ); return $exists === $rule; } function constraintExists( $table, $constraint ) { global $wgDBmwschema; - $SQL = sprintf("SELECT 1 FROM information_schema.table_constraints ". + $SQL = sprintf( "SELECT 1 FROM information_schema.table_constraints ". "WHERE constraint_schema = %s AND table_name = %s AND constraint_name = %s", - $this->addQuotes($wgDBmwschema), - $this->addQuotes($table), - $this->addQuotes($constraint)); - $res = $this->query($SQL); - if (!$res) + $this->addQuotes( $wgDBmwschema ), + $this->addQuotes( $table ), + $this->addQuotes( $constraint ) + ); + $res = $this->query( $SQL ); + if ( !$res ) { return null; + } $rows = $res->numRows(); return $rows; } @@ -1245,7 +1250,7 @@ SQL; * Query whether a given schema exists. Returns the name of the owner */ function schemaExists( $schema ) { - $eschema = preg_replace("/'/", "''", $schema); + $eschema = preg_replace( "/'/", "''", $schema ); $SQL = "SELECT rolname FROM pg_catalog.pg_namespace n, pg_catalog.pg_roles r " ."WHERE n.nspowner=r.oid AND n.nspname = '$eschema'"; $res = $this->query( $SQL ); @@ -1259,7 +1264,7 @@ SQL; } function fieldInfo( $table, $field ) { - return PostgresField::fromText($this, $table, $field); + return PostgresField::fromText( $this, $table, $field ); } /** @@ -1282,90 +1287,90 @@ SQL; // Make sure that we can write to the correct schema // If not, Postgres will happily and silently go to the next search_path item - $ctest = "mediawiki_test_table"; - $safeschema = $this->quote_ident($wgDBmwschema); - if ($this->tableExists($ctest, $wgDBmwschema)) { - $this->doQuery("DROP TABLE $safeschema.$ctest"); + $ctest = 'mediawiki_test_table'; + $safeschema = $this->quote_ident( $wgDBmwschema ); + if ( $this->tableExists( $ctest, $wgDBmwschema ) ) { + $this->doQuery( "DROP TABLE $safeschema.$ctest" ); } $SQL = "CREATE TABLE $safeschema.$ctest(a int)"; $olde = error_reporting( 0 ); - $res = $this->doQuery($SQL); + $res = $this->doQuery( $SQL ); error_reporting( $olde ); - if (!$res) { - print "FAILED. Make sure that the user \"" . htmlspecialchars( $wgDBuser ) . - "\" can write to the schema \"" . htmlspecialchars( $wgDBmwschema ) . "\"\n"; - dieout(""); # Will close the main list