N°6299 - DBUpdate regression in 3.1 when setting a field with same value in the concerned object

This commit is contained in:
Eric Espie
2023-05-11 16:16:49 +02:00
parent 7fe565c4fb
commit 5dc80f31f5
4 changed files with 23 additions and 3 deletions

View File

@@ -519,6 +519,15 @@ abstract class CMDBObject extends DBObject
utils::PopArchiveMode();
}
}
public function DBUpdate()
{
if (count($this->ListChanges()) === 0) {
$this->InitPreviousValuesForUpdatedAttributes();
return $this->GetKey();
}
return parent::DBUpdate(); // TODO: Change the autogenerated stub
}
}

View File

@@ -3637,9 +3637,10 @@ abstract class DBObject implements iDisplay
* @uses m_aOrigValues
* @uses m_aPreviousValuesForUpdatedAttributes
* @since 2.7.0 N°2293
* @since 3.1.0 N°6299 - change visibility
* @throws \Exception
*/
private function InitPreviousValuesForUpdatedAttributes()
protected final function InitPreviousValuesForUpdatedAttributes()
{
$aChanges= $this->ListChanges();
if (empty($aChanges))

View File

@@ -118,6 +118,12 @@ class DBObjectTest extends ItopDataTestCase
$this->assertCount(0, $oOrg->ListChanges());
$this->assertCount(0, $oOrg->ListPreviousValuesForUpdatedAttributes());
$oOrg->Set('name', $oOrg->Get('name'));
$this->assertCount(0, $oOrg->ListChanges());
$oOrg->DBUpdate();
$this->assertCount(0, $oOrg->ListChanges());
$this->assertCount(0, $oOrg->ListPreviousValuesForUpdatedAttributes());
$oOrg->DBDelete();
$oOrg = MetaModel::NewObject('Organization');
@@ -236,11 +242,15 @@ class DBObjectTest extends ItopDataTestCase
});
$this->assertDBQueryCount(0, function() use (&$oBordeaux, &$oObject){
/** @var DBObject $oObject */
$oObject->Set('location_id', $oBordeaux);
static::assertEquals('IT Department', $oObject->Get('org_id_friendlyname'));
static::assertEquals('IT Department', $oObject->Get('org_name'));
static::assertEquals('Bordeaux', $oObject->Get('location_id_friendlyname'));
});
static::assertEquals('Bordeaux', $oObject->Get('location_id_friendlyname'));
// static::assertEquals('toto', $oObject->EvaluateExpression(\Expression::FromOQL("CONCAT(org_name, '-', location_id_friendlyname)")));
}
/**

View File

@@ -365,11 +365,11 @@ class UserLocalTest extends ItopDataTestCase
'oExpectedBefore' => null,
'bRenewedDateTouched' => true,
),
/*'EXPIRE_NEVER (default mode): nothing changed on UserLocal' => array(
'EXPIRE_NEVER (default mode): nothing changed on UserLocal' => array(
'sExpirationMode' => 'never_expire',
'oExpectedBefore' => null,
'bRenewedDateTouched' => false,
),*/
),
'EXPIRE_FORCE: nominal case' => array(
'sExpirationMode' => 'force_expire',
'oExpectedBefore' => null,