<?php
namespace Cake\Database\Type;
use Cake\Core\Exception\Exception;
use Cake\Database\Driver;
use Cake\Database\Driver\Sqlserver;
use Cake\Database\Type;
use Cake\Database\TypeInterface;
use PDO;
class BinaryType extends Type implements TypeInterface
{
protected $_name;
public function __construct($name = null)
{
$this->_name = $name;
}
public function toDatabase($value, Driver $driver)
{
return $value;
}
public function toPHP($value, Driver $driver)
{
if ($value === null) {
return null;
}
if (is_string($value)
&& $driver instanceof Sqlserver
&& version_compare(PHP_VERSION, '7.0', '<')
) {
$value = pack('H*', $value);
}
if (is_string($value)) {
return fopen('data:text/plain;base64,' . base64_encode($value), 'rb');
}
if (is_resource($value)) {
return $value;
}
throw new Exception(sprintf('Unable to convert %s into binary.', gettype($value)));
}
public function toStatement($value, Driver $driver)
{
return PDO::PARAM_LOB;
}
public function marshal($value)
{
return $value;
}
}