From 91bd92df31ee4236567398461eaaa7f4fef2fb0e Mon Sep 17 00:00:00 2001 From: Loz Calver Date: Fri, 1 Dec 2017 16:17:44 +0000 Subject: [PATCH] FIX: Remove some unnecessary ClassInfo calls in DataObjectSchema --- src/ORM/DataObjectSchema.php | 13 +++++++++++-- tests/php/ORM/DataObjectTest.php | 5 +---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/ORM/DataObjectSchema.php b/src/ORM/DataObjectSchema.php index 34890d759..aa136cb65 100644 --- a/src/ORM/DataObjectSchema.php +++ b/src/ORM/DataObjectSchema.php @@ -138,11 +138,11 @@ class DataObjectSchema */ public function baseDataClass($class) { - $class = ClassInfo::class_name($class); $current = $class; while ($next = get_parent_class($current)) { if ($next === DataObject::class) { - return $current; + // Only use ClassInfo::class_name() to format the class if we've not used get_parent_class() + return ($current === $class) ? ClassInfo::class_name($current) : $current; } $current = $next; } @@ -201,6 +201,11 @@ class DataObjectSchema $db = []; $classes = $uninherited ? [$class] : ClassInfo::ancestry($class); foreach ($classes as $tableClass) { + // Skip irrelevant parent classes + if (!is_subclass_of($tableClass, DataObject::class)) { + continue; + } + // Find all fields on this class $fields = $this->databaseFields($tableClass, false); // Merge with composite fields @@ -394,6 +399,10 @@ class DataObjectSchema */ public function classHasTable($class) { + if (!is_subclass_of($class, DataObject::class)) { + return false; + } + $fields = $this->databaseFields($class, false); return !empty($fields); } diff --git a/tests/php/ORM/DataObjectTest.php b/tests/php/ORM/DataObjectTest.php index dfbccaab8..77637977f 100644 --- a/tests/php/ORM/DataObjectTest.php +++ b/tests/php/ORM/DataObjectTest.php @@ -1341,10 +1341,7 @@ class DataObjectTest extends SapphireTest $this->assertFalse($schema->classHasTable(DataObject::class)); $this->assertFalse($schema->classHasTable(ViewableData::class)); - // Invalid class - $this->expectException(ReflectionException::class); - $this->expectExceptionMessage('Class ThisIsntADataObject does not exist'); - + /* Invalid class name */ $this->assertFalse($schema->classHasTable("ThisIsntADataObject")); }