Merge branch 'master' of git@github.com:silverstripe/silverstripe-postgresql.git

This commit is contained in:
miiihi 2011-10-24 14:15:43 +02:00
commit 074c872526
2 changed files with 73 additions and 6 deletions

View File

@ -872,7 +872,7 @@ class PostgreSQLDatabase extends SS_Database {
*
* @return boolean
*/
function clear_cached_fieldlist($tableName=false){
function clearCachedFieldlist($tableName=false){
if($tableName!=false){
unset(self::$cached_fieldlists[$tableName]);
} else
@ -1554,15 +1554,13 @@ class PostgreSQLDatabase extends SS_Database {
* helper function in Database?
*/
public function sqlQueryToString(SQLQuery $sqlQuery) {
if (!$sqlQuery->from) return '';
$distinct = $sqlQuery->distinct ? "DISTINCT " : "";
if($sqlQuery->delete) {
$text = "DELETE ";
} else if($sqlQuery->select) {
$text = "SELECT $distinct" . implode(", ", $sqlQuery->select);
}
$text .= " FROM " . implode(" ", $sqlQuery->from);
if($sqlQuery->from) $text .= " FROM " . implode(" ", $sqlQuery->from);
if($sqlQuery->where) $text .= " WHERE (" . $sqlQuery->getFilter(). ")";
if($sqlQuery->groupby) $text .= " GROUP BY " . implode(", ", $sqlQuery->groupby);
if($sqlQuery->having) $text .= " HAVING ( " . implode(" ) AND ( ", $sqlQuery->having) . " )";
@ -1683,10 +1681,17 @@ class PostgreSQLDatabase extends SS_Database {
);
foreach($result as $row){
if($row['table_name']=='SiteTree')
if($row['table_name']=='SiteTree') {
$showInSearch="AND \"ShowInSearch\"=1 ";
else
} elseif($row['table_name']=='File') {
// File.ShowInSearch was added later, keep the database driver backwards compatible
// by checking for its existence first
$fields = $this->fieldList($row['table_name']);
if(array_key_exists('ShowInSearch', $fields)) $showInSearch="AND \"ShowInSearch\"=1 ";
else $showInSearch='';
} else {
$showInSearch='';
}
//public function extendedSQL($filter = "", $sort = "", $limit = "", $join = "", $having = ""){
$query=singleton($row['table_name'])->extendedSql("\"" . $row['table_name'] . "\".\"" . $row['column_name'] . "\" " . $this->default_fts_search_method . ' q ' . $showInSearch, '');
@ -1749,6 +1754,13 @@ class PostgreSQLDatabase extends SS_Database {
else
return false;
}
/**
* @deprecated 1.0 Use transactionStart() (method required for 2.4.x)
*/
public function startTransaction($transaction_mode=false, $session_characteristics=false){
$this->transactionStart($transaction_mode, $session_characteristics);
}
/*
* Start a prepared transaction
@ -1784,6 +1796,13 @@ class PostgreSQLDatabase extends SS_Database {
DB::query('ROLLBACK;');
}
/**
* @deprecated 1.0 Use transactionEnd() (method required for 2.4.x)
*/
public function endTransaction(){
$this->transactionEnd();
}
/*
* Commit everything inside this transaction so far

View File

@ -0,0 +1,48 @@
<?php
/**
* @package postgresql
* @subpackage tests
*/
class PostgreSQLDatabaseTest extends SapphireTest {
function testReadOnlyTransaction(){
if(
DB::getConn()->supportsTransactions() == true
&& DB::getConn() instanceof PostgreSQLDatabase
){
$page=new Page();
$page->Title='Read only success';
$page->write();
DB::getConn()->transactionStart('READ ONLY');
try {
$page=new Page();
$page->Title='Read only page failed';
$page->write();
} catch (Exception $e) {
//could not write this record
//We need to do a rollback or a commit otherwise we'll get error messages
DB::getConn()->transactionRollback();
}
DB::getConn()->transactionEnd();
DataObject::flush_and_destroy_cache();
$success=DataObject::get('Page', "\"Title\"='Read only success'");
$fail=DataObject::get('Page', "\"Title\"='Read only page failed'");
//This page should be in the system
$this->assertTrue(is_object($success) && $success->exists());
//This page should NOT exist, we had 'read only' permissions
$this->assertFalse(is_object($fail) && $fail->exists());
} else {
$this->markTestSkipped('Current database is not PostgreSQL');
}
}
}