Merge branch '3.7' into 3

This commit is contained in:
Robbie Averill 2019-01-29 14:00:28 +02:00
commit 3f46f2d27e
4 changed files with 16 additions and 3 deletions

View File

@ -866,7 +866,7 @@ class Injector {
return $this->instantiate($spec, $name); return $this->instantiate($spec, $name);
} }
return $this->instantiate($spec); return $this->instantiate($spec, null, 'prototype');
} }
/** /**

View File

@ -908,6 +908,10 @@ abstract class SS_Object {
$methods = $this->findMethodsFromExtension($extension); $methods = $this->findMethodsFromExtension($extension);
if ($methods) { if ($methods) {
foreach ($methods as $method) { foreach ($methods as $method) {
if (!isset(self::$extra_methods[$this->class][$method])) {
continue;
}
$methodInfo = self::$extra_methods[$this->class][$method]; $methodInfo = self::$extra_methods[$this->class][$method];
if ($methodInfo['property'] === $property && $methodInfo['index'] === $index) { if ($methodInfo['property'] === $property && $methodInfo['index'] === $index) {

View File

@ -446,7 +446,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider {
// Build a list of suffixes whose tables need versioning // Build a list of suffixes whose tables need versioning
$allSuffixes = array(); $allSuffixes = array();
$versionableExtensions = $this->owner->config()->versionableExtensions; $versionableExtensions = (array)$this->owner->config()->versionableExtensions;
if(count($versionableExtensions)){ if(count($versionableExtensions)){
foreach ($versionableExtensions as $versionableExtension => $suffixes) { foreach ($versionableExtensions as $versionableExtension => $suffixes) {
@ -936,7 +936,7 @@ class Versioned extends DataExtension implements TemplateGlobalProvider {
* @return string * @return string
*/ */
public function extendWithSuffix($table) { public function extendWithSuffix($table) {
$versionableExtensions = $this->owner->config()->versionableExtensions; $versionableExtensions = (array)$this->owner->config()->versionableExtensions;
if(count($versionableExtensions)){ if(count($versionableExtensions)){
foreach ($versionableExtensions as $versionableExtension => $suffixes) { foreach ($versionableExtensions as $versionableExtension => $suffixes) {

View File

@ -39,6 +39,13 @@ class DataObjectTest extends SapphireTest {
*/ */
public function testSingleton($inst, $defaultValue, $altDefaultValue) public function testSingleton($inst, $defaultValue, $altDefaultValue)
{ {
// Calls to scaffold the test database may have cached service specs for DataObjects
// with the incorrect 'type' set (singleton instead of prototype)
Injector::nest();
$reflectionProp = new ReflectionProperty('Injector', 'specs');
$reflectionProp->setAccessible(true);
$reflectionProp->setValue(Injector::inst(), array());
$inst = $inst(); $inst = $inst();
// Test that populateDefaults() isn't called on singletons // Test that populateDefaults() isn't called on singletons
// which can lead to SQL errors during build, and endless loops // which can lead to SQL errors during build, and endless loops
@ -53,6 +60,8 @@ class DataObjectTest extends SapphireTest {
} else { } else {
$this->assertEmpty($inst->MyFieldWithAltDefault); $this->assertEmpty($inst->MyFieldWithAltDefault);
} }
Injector::unnest();
} }
public function provideSingletons() public function provideSingletons()