From 54c3aa3f997aa843be84880d518d1a36ba265926 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 22 Oct 2024 11:20:38 +0200 Subject: fix(entity): Fix mapping of old/sub-types to actually supported database types Signed-off-by: Joas Schilling --- lib/public/AppFramework/Db/Entity.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'lib') diff --git a/lib/public/AppFramework/Db/Entity.php b/lib/public/AppFramework/Db/Entity.php index cd15df134f1..d90d3ed4837 100644 --- a/lib/public/AppFramework/Db/Entity.php +++ b/lib/public/AppFramework/Db/Entity.php @@ -112,6 +112,15 @@ abstract class Entity { } switch ($type) { + case Types::BIGINT: + case Types::SMALLINT: + settype($args[0], Types::INTEGER); + break; + case Types::BINARY: + case Types::DECIMAL: + case Types::TEXT: + settype($args[0], Types::STRING); + break; case Types::TIME: case Types::DATE: case Types::DATETIME: @@ -260,9 +269,22 @@ abstract class Entity { * * @param string $fieldName the name of the attribute * @param \OCP\DB\Types::* $type the type which will be used to match a cast + * @since 31.0.0 Parameter $type is now restricted to {@see \OCP\DB\Types} constants. The formerly accidentally supported types 'int'|'bool'|'double' are mapped to Types::INTEGER|Types::BOOLEAN|Types::FLOAT accordingly. * @since 7.0.0 */ protected function addType(string $fieldName, string $type): void { + /** @psalm-suppress TypeDoesNotContainType */ + if (in_array($type, ['bool', 'double', 'int', 'array', 'object'], true)) { + // Mapping legacy strings to the actual types + $type = match ($type) { + 'int' => Types::INTEGER, + 'bool' => Types::BOOLEAN, + 'double' => Types::FLOAT, + 'array', + 'object' => Types::STRING, + }; + } + $this->_fieldTypes[$fieldName] = $type; } -- cgit v1.2.3