• Модуль: 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;
	}
}