API CHANGE: $database_extensions static variable now supported

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@88294 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
Geoff Munn 2009-10-08 01:21:24 +00:00
parent e31b4abb7b
commit 084e3801c5

View File

@ -1740,6 +1740,23 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
return isset($items) ? $items : null; return isset($items) ? $items : null;
} }
/**
* This returns an array (if it exists) describing the database extensions that are required, or false if none
*
* This is experimental, and is currently only a Postgres-specific enhancement.
*
* @return array or false
*/
function database_extensions($class){
$extensions = Object::uninherited_static($class, 'database_extensions');
if($extensions)
return $extensions;
else
return false;
}
/** /**
* Generates a SearchContext to be used for building and processing * Generates a SearchContext to be used for building and processing
* a generic search form for properties on this object. * a generic search form for properties on this object.
@ -2833,11 +2850,13 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
public function requireTable() { public function requireTable() {
// Only build the table if we've actually got fields // Only build the table if we've actually got fields
$fields = self::database_fields($this->class); $fields = self::database_fields($this->class);
$extensions = self::database_extensions($this->class);
$indexes = $this->databaseIndexes(); $indexes = $this->databaseIndexes();
if($fields) { if($fields) {
$hasAutoIncPK = ($this->class == ClassInfo::baseDataClass($this->class)); $hasAutoIncPK = ($this->class == ClassInfo::baseDataClass($this->class));
DB::requireTable($this->class, $fields, $indexes, $hasAutoIncPK, $this->stat('create_table_options')); DB::requireTable($this->class, $fields, $indexes, $hasAutoIncPK, $this->stat('create_table_options'), $extensions);
} else { } else {
DB::dontRequireTable($this->class); DB::dontRequireTable($this->class);
} }
@ -2861,7 +2880,7 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity
(($this->class == $childClass) ? "ChildID" : "{$childClass}ID") => true, (($this->class == $childClass) ? "ChildID" : "{$childClass}ID") => true,
); );
DB::requireTable("{$this->class}_$relationship", $manymanyFields, $manymanyIndexes); DB::requireTable("{$this->class}_$relationship", $manymanyFields, $manymanyIndexes, true, null, $extensions);
} }
} }