• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/db/mysqlisqlhelper.php
  • Класс: BitrixMainDBMysqliSqlHelper
  • Вызов: MysqliSqlHelper::getColumnTypeByField
public function getColumnTypeByField(ScalarField $field)
{
	if ($field instanceof ORMFieldsIntegerField)
	{
		switch ($field->getSize())
		{
			case 2:
				return 'smallint';
			case 4:
				return 'int';
			case 8:
				return 'bigint';
		}
		return 'int';
	}
	elseif ($field instanceof ORMFieldsDecimalField)
	{
		$defaultPrecision = 18;
		$defaultScale = 2;

		$precision = $field->getPrecision() > 0 ? $field->getPrecision() : $defaultPrecision;
		$scale = $field->getScale() > 0 ? $field->getScale() : $defaultScale;

		if ($scale >= $precision)
		{
			$precision = $defaultPrecision;
			$scale = $defaultScale;
		}

		return "decimal($precision, $scale)";
	}
	elseif ($field instanceof ORMFieldsFloatField)
	{
		return 'double';
	}
	elseif ($field instanceof ORMFieldsDatetimeField)
	{
		return 'datetime';
	}
	elseif ($field instanceof ORMFieldsDateField)
	{
		return 'date';
	}
	elseif ($field instanceof ORMFieldsTextField)
	{
		return $field->isLong() ? 'longtext' : 'text';
	}
	elseif ($field instanceof ORMFieldsBooleanField)
	{
		$values = $field->getValues();

		if (preg_match('/^[0-9]+$/', $values[0]) && preg_match('/^[0-9]+$/', $values[1]))
		{
			return 'int';
		}
		else
		{
			return 'varchar('.max(mb_strlen($values[0]), mb_strlen($values[1])).')';
		}
	}
	elseif ($field instanceof ORMFieldsEnumField)
	{
		return 'varchar('.max(array_map('strlen', $field->getValues())).')';
	}
	else
	{
		// string by default
		$defaultLength = false;
		foreach ($field->getValidators() as $validator)
		{
			if ($validator instanceof ORMFieldsValidatorsLengthValidator)
			{
				if ($defaultLength === false || $defaultLength > $validator->getMax())
				{
					$defaultLength = $validator->getMax();
				}
			}
		}
		return 'varchar('.($defaultLength > 0? $defaultLength: 255).')';
	}
}