N.689 throw Exception if querying without needed finalClass attribute, plus some PHPDoc

SVN:trunk[5050]
This commit is contained in:
Pierre Goiffon
2017-10-19 13:42:56 +00:00
parent b798b43733
commit 5ada93b46c

View File

@@ -623,6 +623,11 @@ abstract class MetaModel
return self::$m_aClassParams[$sClass]["db_finalclass_field"]; return self::$m_aClassParams[$sClass]["db_finalclass_field"];
} }
/**
* @param string $sClass
*
* @return boolean true if the class has no parent and no children
*/
final static public function IsStandaloneClass($sClass) final static public function IsStandaloneClass($sClass)
{ {
self::_check_subclass($sClass); self::_check_subclass($sClass);
@@ -2772,6 +2777,11 @@ abstract class MetaModel
return $aRes; return $aRes;
} }
/**
* @param string $sClass
*
* @return bool
*/
public static function HasChildrenClasses($sClass) public static function HasChildrenClasses($sClass)
{ {
return (count(self::$m_aChildClasses[$sClass]) > 0); return (count(self::$m_aChildClasses[$sClass]) > 0);
@@ -2831,6 +2841,11 @@ abstract class MetaModel
return true; return true;
} }
/**
* @param string $sClass
*
* @return bool
*/
public static function IsAbstract($sClass) public static function IsAbstract($sClass)
{ {
$oReflection = new ReflectionClass($sClass); $oReflection = new ReflectionClass($sClass);
@@ -5021,6 +5036,7 @@ abstract class MetaModel
* @param array $aExtendedDataSpec * @param array $aExtendedDataSpec
* *
* @return DBObject * @return DBObject
* @throws CoreUnexpectedValue if finalClass attribute wasn't specified but is needed
* @throws CoreException if finalClass cannot be found * @throws CoreException if finalClass cannot be found
*/ */
public static function GetObjectByRow($sClass, $aRow, $sClassAlias = '', $aAttToLoad = null, $aExtendedDataSpec = null) public static function GetObjectByRow($sClass, $aRow, $sClassAlias = '', $aAttToLoad = null, $aExtendedDataSpec = null)
@@ -5038,6 +5054,14 @@ abstract class MetaModel
{ {
// Either this is a bug (forgot to specify a root class with a finalclass field // Either this is a bug (forgot to specify a root class with a finalclass field
// Or this is the expected behavior, because the object is not made of several tables // Or this is the expected behavior, because the object is not made of several tables
if (self::IsAbstract($sClass))
{
throw new CoreUnexpectedValue("Querying the abstract '$sClass' class without finalClass attribute");
}
if (self::HasChildrenClasses($sClass))
{
throw new CoreUnexpectedValue("Querying the '$sClass' class without the finalClass attribute, whereas this class has children");
}
} }
elseif (empty($aRow[$sClassAlias."finalclass"])) elseif (empty($aRow[$sClassAlias."finalclass"]))
{ {