From 7568d57757284c8af51a43b0efcb1ccbcbff0a6f Mon Sep 17 00:00:00 2001 From: Rostislav Wolny Date: Thu, 13 Feb 2020 20:57:50 +0100 Subject: [PATCH] Introduce serialized_array type [MAILPOET-2710] --- lib/Doctrine/ConnectionFactory.php | 2 ++ lib/Doctrine/Types/SerializedArrayType.php | 38 ++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 lib/Doctrine/Types/SerializedArrayType.php diff --git a/lib/Doctrine/ConnectionFactory.php b/lib/Doctrine/ConnectionFactory.php index a2891c6ced..de907f0e56 100644 --- a/lib/Doctrine/ConnectionFactory.php +++ b/lib/Doctrine/ConnectionFactory.php @@ -5,6 +5,7 @@ namespace MailPoet\Doctrine; use MailPoet\Config\Env; use MailPoet\Doctrine\Types\JsonOrSerializedType; use MailPoet\Doctrine\Types\JsonType; +use MailPoet\Doctrine\Types\SerializedArrayType; use MailPoetVendor\Doctrine\DBAL\DriverManager; use MailPoetVendor\Doctrine\DBAL\Platforms\MySqlPlatform; use MailPoetVendor\Doctrine\DBAL\Types\Type; @@ -19,6 +20,7 @@ class ConnectionFactory { private $types = [ JsonType::NAME => JsonType::class, JsonOrSerializedType::NAME => JsonOrSerializedType::class, + SerializedArrayType::NAME => SerializedArrayType::class, ]; public function createConnection() { diff --git a/lib/Doctrine/Types/SerializedArrayType.php b/lib/Doctrine/Types/SerializedArrayType.php new file mode 100644 index 0000000000..e7f53d9447 --- /dev/null +++ b/lib/Doctrine/Types/SerializedArrayType.php @@ -0,0 +1,38 @@ +getClobTypeDeclarationSQL($fieldDeclaration); + } + + public function convertToDatabaseValue($value, AbstractPlatform $platform) { + return \serialize($value); + } + + public function convertToPHPValue($value, AbstractPlatform $platform) { + if ($value === null) { + return null; + } + $value = \is_resource($value) ? \stream_get_contents($value) : $value; + $val = \unserialize($value); + if ($val === \false && $value !== 'b:0;') { + return null; + } + return $val; + } + + public function getName() { + return self::NAME; + } + + public function requiresSQLCommentHint(AbstractPlatform $platform) { + return true; + } +}