<?php
-# $Id$
/**
- * DO NOT USE !!! Unless you want to help developping it.
+ * This is PostgreSQL database abstraction layer.
+ *
+ * As it includes more generic version for DB functions,
+ * than MySQL ones, some of them should be moved to parent
+ * Database class.
*
- * This file is an attempt to port the mysql database layer to postgreSQL. The
- * only thing done so far is s/mysql/pg/ and dieing if function haven't been
- * ported.
- *
- * As said brion 07/06/2004 :
- * "table definitions need to be changed. fulltext index needs to work differently
- * things that use the last insert id need to be changed. Probably other things
- * need to be changed. various semantics may be different."
- *
- * Hashar
+ * STATUS: Working PG implementation of MediaWiki
+ * TODO: Installer support
*
* @package MediaWiki
*/
$this->mUser = $user;
$this->mPassword = $password;
$this->mDBname = $dbName;
+ $this->mSchemas = array($wgDBschema,'public');
$success = false;
wfDebug( "Server: $server, Database: $dbName, User: $user, Password: " . substr( $password, 0, 3 ) . "...\n" );
wfDebug( $this->lastError()."\n" );
} else {
+ $this->setSchema();
$this->mOpened = true;
}
- $this->query("SET search_path = $wgDBschema,public");
}
return $this->mConn;
}
return false;*/
}
- function insertArray( $table, $a, $fname = 'Database::insertArray', $options = array() ) {
+ function insert( $table, $a, $fname = 'Database::insert', $options = array() ) {
# PostgreSQL doesn't support options
# We have a go at faking one of them
# TODO: DELAYED, LOW_PRIORITY
$a = array( $a );
}
foreach ( $a as $row ) {
- parent::insertArray( $table, $row, $fname, array() );
+ parent::insert( $table, $row, $fname, array() );
}
$this->ignoreErrors( $oldIgnore );
$retVal = true;
# First run any transformations from the parent object
$name = parent::tableName( $name );
+ # Replace backticks into double quotes
+ $name = strtr($name,'`','"');
+
# Now quote PG reserved keywords
switch( $name ) {
case 'user':
- return '"user"';
case 'old':
- return '"old"';
+ case 'group':
+ return '"' . $name . '"';
+
default:
return $name;
}
* Return the next in a sequence, save the value for retrieval via insertId()
*/
function nextSequenceValue( $seqName ) {
- $value = $this->getField(''," nextval('" . $seqName . "')");
+ $value = $this->selectField(''," nextval('" . $seqName . "')");
$this->mInsertId = $value;
return $value;
}
$this->freeResult( $res );
return $version;
}
+
+ function setSchema($schema=false) {
+ $schemas=$this->mSchemas;
+ if ($schema) { array_unshift($schemas,$schema); }
+ $searchpath=$this->makeList($schemas,LIST_NAMES);
+ $this->query("SET search_path = $searchpath");
+ }
}
/**