Your IP : 172.28.240.42


Current Path : /var/www/html/clients/nkpgkx11.e-nk.ru/bitrix/modules/main/lib/db/
Upload File :
Current File : /var/www/html/clients/nkpgkx11.e-nk.ru/bitrix/modules/main/lib/db/mssqlsqlhelper.php

<?php
namespace Bitrix\Main\DB;

class MssqlSqlHelper
	extends SqlHelper
{
	public function getQueryDelimiter()
	{
		return "\nGO";
	}

	function forSql($value, $maxLength = 0)
	{
		return str_replace("\x00", "", ($maxLength > 0) ? str_replace("'", "''", substr($value, 0, $maxLength)) : str_replace("'", "''", $value));
	}

	public function getCurrentDateTimeFunction()
	{
		return "GETDATE()";
	}

	public function getCurrentDateFunction()
	{
		return "convert(datetime, cast(year(getdate()) as varchar(4)) + '-' + cast(month(getdate()) as varchar(2)) + '-' + cast(day(getdate()) as varchar(2)), 120)";
	}

	public function getDatetimeToDateFunction($value)
	{
		return 'DATEADD(dd, DATEDIFF(dd, 0, '.$value.'), 0)';
	}

	public function getConcatFunction()
	{
		$str = "";
		$ar = func_get_args();
		if (is_array($ar))
			$str .= implode(" + ", $ar);
		return $str;
	}

	public function getIsNullFunction($expression, $result)
	{
		return "ISNULL(".$expression.", ".$result.")";
	}

	public function getLengthFunction($field)
	{
		return "LEN(".$field.")";
	}

	public function getToCharFunction($expr, $length = 0)
	{
		return "CAST(".$expr." AS CHAR".($length > 0 ? "(".$length.")" : "").")";
	}

	public function getDateTimeToDbFunction(\Bitrix\Main\Type\DateTime $value, $type = \Bitrix\Main\Type\DateTime::DATE_WITH_TIME)
	{
		$customOffset = $value->getOffset();

		$serverTime = new \Bitrix\Main\Type\DateTime();
		$serverOffset = $serverTime->getOffset();

		$diff = $customOffset - $serverOffset;
		$valueTmp = clone $value;

		$valueTmp->sub(new \DateInterval(sprintf("PT%sS", $diff)));

		$format = ($type == \Bitrix\Main\Type\DateTime::DATE_WITHOUT_TIME ? "Y-m-d" : "Y-m-d H:i:s");
		$date = "CONVERT(datetime, '".$valueTmp->format($format)."', 120)";

		return $date;
	}

	public function getDateTimeFromDbFunction($fieldName)
	{
		return "CONVERT(varchar(19), ".$fieldName.", 120)";
	}

	public function prepareInsert($tableName, $arFields)
	{
		$strInsert1 = "";
		$strInsert2 = "";

		$arColumns = $this->dbConnection->getTableFields($tableName);
		foreach ($arColumns as $columnName => $columnInfo)
		{
			if (array_key_exists($columnName, $arFields))
			{
				$strInsert1 .= ", ".$columnName."";
				$strInsert2 .= ", ".$this->convertValueToDb($arFields[$columnName], $columnInfo);
			}
			elseif (array_key_exists("~".$columnName, $arFields))
			{
				$strInsert1 .= ", ".$columnName."";
				$strInsert2 .= ", ".$arFields["~".$columnName];
			}
		}

		if ($strInsert1 != "")
		{
			$strInsert1 = " ".substr($strInsert1, 2)." ";
			$strInsert2 = " ".substr($strInsert2, 2)." ";
		}

		return array($strInsert1, $strInsert2, array());
	}

	public function prepareUpdate($tableName, $arFields)
	{
		$strUpdate = "";

		$arColumns = $this->dbConnection->getTableFields($tableName);
		foreach ($arColumns as $columnName => $columnInfo)
		{
			if (array_key_exists($columnName, $arFields))
				$strUpdate .= ", ".$columnName." = ".$this->convertValueToDb($arFields[$columnName], $columnInfo);
			elseif (array_key_exists("~".$columnName, $arFields))
				$strUpdate .= ", ".$columnName." = ".$arFields["~".$columnName];
		}

		if ($strUpdate != "")
			$strUpdate = " ".substr($strUpdate, 2)." ";

		return array($strUpdate, array());
	}

	protected function convertValueToDb($value, $columnInfo)
	{
		if ($value === null)
			return "NULL";

		switch ($columnInfo["TYPE"])
		{
			case "datetime":
			case "timestamp":
				if (empty($value))
					$result = "NULL";
				else
					$result = $this->getDatetimeToDbFunction($value, \Bitrix\Main\Type\DateTime::DATE_WITH_TIME);
				break;
			case "int":
			case "tinyint":
			case "smallint":
			case "bigint":
				$result = "'".intval($value)."'";
				break;
			case "decimal":
			case "numeric":
				$result = "'".round(doubleval($value), intval($columnInfo["NUMERIC_SCALE"]))."'";
				break;
			case "real":
			case "float":
				$result = "'".doubleval($value)."'";
				break;
			case "image":
				$result = $value;
				break;
			default:
				$result = "'".$this->forSql($value, $columnInfo['CHARACTER_MAXIMUM_LENGTH'])."'";
				break;
		}

		return $result;
	}
}