- Модуль: perfmon
- Путь к файлу: ~/bitrix/modules/perfmon/lib/sql/updater.php
- Класс: BitrixPerfmonSqlUpdater
- Вызов: Updater::handleChange
protected function handleChange(BaseObject $source, BaseObject $target)
{
if ($source instanceof Sequence || $source instanceof Procedure)
{
$dropStmt = $this->createStatement("$DB->Query("", $source->getDropDdl($this->dbType), "", true);");
$createStmt = $this->createStatement("$DB->Query("", $target->getCreateDdl($this->dbType), "", true);");
$stmt = new PhpStatement;
$stmt->dependOn = $this->tableCheck->getLowercasedName();
$stmt->merge($dropStmt);
$stmt->merge($createStmt);
$stmt->addCondition("$updater->CanUpdateDatabase()");
$stmt->addCondition("$updater->TableExists("".EscapePHPString($this->tableCheck->getLowercasedName())."")");
}
elseif ($target instanceof Column)
{
$ddl = $source->getModifyDdl($target, $this->dbType);
$predicate = "$updater->TableExists("".EscapePHPString($source->parent->getLowercasedName())."")";
$cond = "ttif ($predicate)n";
$predicate2 = "$DB->Query("SELECT ".EscapePHPString($source->name)." FROM ".EscapePHPString($source->parent->getLowercasedName())." WHERE 1=0", true)";
$this->columns[$cond][] = [$predicate2, $ddl, $source->parent->getLowercasedName(), $predicate, $predicate2];
}
elseif ($source instanceof Index)
{
$predicate = "$updater->TableExists("".EscapePHPString($source->parent->getLowercasedName())."")";
$cond = "ttif ($predicate)n";
$predicate2 = "$DB->IndexExists("".EscapePHPString($source->parent->getUnquotedName())."", array(".$this->multiLinePhp(""", $source->getUnquotedName($source->columns), "", ")."), true)";
$dropStmt = $this->createStatement("$DB->Query("", $source->getDropDdl($this->dbType), "", true);");
$createStmt = $this->createStatement("$DB->Query("", $target->getCreateDdl($this->dbType), "", true);");
$stmt = new PhpStatement;
$stmt->dependOn = $source->parent->getLowercasedName();
$stmt->merge($dropStmt);
$stmt->merge($createStmt);
$stmt->addCondition("$updater->CanUpdateDatabase()");
$stmt->addCondition($predicate);
$stmt->addCondition($predicate2);
$stmt->addCondition("!$DB->IndexExists("".EscapePHPString($target->parent->getUnquotedName())."", array(".$this->multiLinePhp(""", $source->getUnquotedName($source->columns), "", ")."), true)");
}
elseif ($source instanceof Trigger || $source instanceof Constraint)
{
$ddl = $source->getModifyDdl($target, $this->dbType);
$predicate = "$updater->TableExists("".EscapePHPString($source->parent->getLowercasedName())."")";
$cond = "ttif ($predicate)n";
$stmt = $this->createStatement("$DB->Query("", $ddl, "", true);");
$stmt->dependOn = $source->parent->getLowercasedName();
$stmt->addCondition("$updater->CanUpdateDatabase()");
$stmt->addCondition($predicate);
}
else
{
$stmt = $this->createStatement("", "//change for ".get_class($source)." not supported yet", "");
}
if ($stmt)
{
$this->statements[] = $stmt;
}
}