diff --git a/core/model/DataObject.php b/core/model/DataObject.php index bd669522e..2604995b7 100755 --- a/core/model/DataObject.php +++ b/core/model/DataObject.php @@ -2259,8 +2259,9 @@ class DataObject extends ViewableData implements DataObjectInterface, i18nEntity if($field == "Created" && get_parent_class($this) == "DataObject") return "SS_Datetime"; // Add fields from Versioned decorator - if($field == "Version") return $this->hasExtension('Versioned') ? "Int" : false; - + if($field == 'Version' && $this->hasExtension('Versioned')) { + return 'Int'; + } // get cached fieldmap $fieldMap = isset(self::$cache_has_own_table_field[$this->class]) ? self::$cache_has_own_table_field[$this->class] : null; diff --git a/tests/model/VersionedTest.php b/tests/model/VersionedTest.php index c1b22a8f6..e804fe328 100644 --- a/tests/model/VersionedTest.php +++ b/tests/model/VersionedTest.php @@ -159,6 +159,33 @@ class VersionedTest extends SapphireTest { Versioned::reading_stage($origStage); } + + /** + * @covers DataObject::hasOwnTableDatabaseField() + */ + public function testHasOwnTableDatabaseFieldWithVersioned() { + $noversion = new DataObject(); + $versioned = new VersionedTest_DataObject(); + $versionedSub = new VersionedTest_Subclass(); + $versionField = new VersionedTest_UnversionedWithField(); + + $this->assertFalse( + (bool) $noversion->hasOwnTableDatabaseField('Version'), + 'Plain models have no version field.' + ); + $this->assertEquals( + 'Int', $versioned->hasOwnTableDatabaseField('Version'), + 'The versioned ext adds an Int version field.' + ); + $this->assertEquals( + 'Int', $versionedSub->hasOwnTableDatabaseField('Version'), + 'Sub-classes of a versioned model have a Version field.' + ); + $this->assertEquals( + 'Varchar', $versionField->hasOwnTableDatabaseField('Version'), + 'Models w/o Versioned can have their own Version field.' + ); + } } class VersionedTest_DataObject extends DataObject implements TestOnly { @@ -176,3 +203,10 @@ class VersionedTest_Subclass extends VersionedTest_DataObject implements TestOnl "ExtraField" => "Varchar", ); } + +/** + * @ignore + */ +class VersionedTest_UnversionedWithField extends DataObject implements TestOnly { + public static $db = array('Version' => 'Varchar(255)'); +}