From 89a3864df607567bd41e52d80ada0fcf2b3c438c Mon Sep 17 00:00:00 2001 From: Daniel Berthereau Date: Mon, 19 Feb 2024 00:00:00 +0000 Subject: [PATCH 1/3] Added an index on media media type. --- application/data/install/schema.sql | 3 ++- .../20240219000000_AddIndexMediaType.php | 19 +++++++++++++++++++ application/src/Entity/Media.php | 6 +++++- 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 application/data/migrations/20240219000000_AddIndexMediaType.php diff --git a/application/data/install/schema.sql b/application/data/install/schema.sql index 5aeaf9fe02..4a4e1088f5 100644 --- a/application/data/install/schema.sql +++ b/application/data/install/schema.sql @@ -89,7 +89,7 @@ CREATE TABLE `media` ( `renderer` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `data` longtext COLLATE utf8mb4_unicode_ci COMMENT '(DC2Type:json_array)', `source` longtext COLLATE utf8mb4_unicode_ci, - `media_type` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `media_type` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `storage_id` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `extension` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `sha256` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, @@ -103,6 +103,7 @@ CREATE TABLE `media` ( UNIQUE KEY `UNIQ_6A2CA10C5CC5DB90` (`storage_id`), KEY `IDX_6A2CA10C126F525E` (`item_id`), KEY `item_position` (`item_id`,`position`), + KEY `media_type` (`media_type`), CONSTRAINT `FK_6A2CA10C126F525E` FOREIGN KEY (`item_id`) REFERENCES `item` (`id`), CONSTRAINT `FK_6A2CA10CBF396750` FOREIGN KEY (`id`) REFERENCES `resource` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/application/data/migrations/20240219000000_AddIndexMediaType.php b/application/data/migrations/20240219000000_AddIndexMediaType.php new file mode 100644 index 0000000000..4c48473075 --- /dev/null +++ b/application/data/migrations/20240219000000_AddIndexMediaType.php @@ -0,0 +1,19 @@ +executeStatement('ALTER TABLE `media` CHANGE `media_type` `media_type` varchar(190) COLLATE "utf8mb4_unicode_ci" NULL AFTER `source`;'); + $conn->executeStatement('ALTER TABLE `media` ADD INDEX `media_type` (`media_type`);'); + } catch (\Exception $e) { + // Index exists. + } + } +} diff --git a/application/src/Entity/Media.php b/application/src/Entity/Media.php index 25ee390c6c..090a9eb7b9 100644 --- a/application/src/Entity/Media.php +++ b/application/src/Entity/Media.php @@ -8,6 +8,10 @@ * @Index( * name="item_position", * columns={"item_id", "position"} + * ), + * @Index( + * name="media_type", + * columns={"media_type"} * ) * } * ) @@ -41,7 +45,7 @@ class Media extends Resource protected $source; /** - * @Column(nullable=true) + * @Column(nullable=true, length=190) */ protected $mediaType; From d6ad71b8cef4422dfccea8c74b7c56a85697da1f Mon Sep 17 00:00:00 2001 From: Daniel Berthereau Date: Mon, 19 Feb 2024 00:00:00 +0000 Subject: [PATCH 2/3] Limited short fields to 190 unicode characters to simplify indexation. --- application/data/install/schema.sql | 28 +++++------ ...40219000001_LimitFieldsTo190Characters.php | 47 +++++++++++++++++++ application/src/Entity/Asset.php | 4 +- application/src/Entity/Job.php | 6 +-- application/src/Entity/Media.php | 6 +-- application/src/Entity/Module.php | 2 +- application/src/Entity/Resource.php | 2 +- .../src/Entity/ResourceTemplateProperty.php | 2 +- application/src/Entity/SitePage.php | 2 +- application/src/Entity/Value.php | 4 +- 10 files changed, 75 insertions(+), 28 deletions(-) create mode 100644 application/data/migrations/20240219000001_LimitFieldsTo190Characters.php diff --git a/application/data/install/schema.sql b/application/data/install/schema.sql index 4a4e1088f5..82d9188264 100644 --- a/application/data/install/schema.sql +++ b/application/data/install/schema.sql @@ -15,9 +15,9 @@ CREATE TABLE `asset` ( `id` int NOT NULL AUTO_INCREMENT, `owner_id` int DEFAULT NULL, `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `media_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `media_type` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `storage_id` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, - `extension` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `extension` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `alt_text` longtext COLLATE utf8mb4_unicode_ci, PRIMARY KEY (`id`), UNIQUE KEY `UNIQ_2AF5A5C5CC5DB90` (`storage_id`), @@ -71,9 +71,9 @@ CREATE TABLE `item_site` ( CREATE TABLE `job` ( `id` int NOT NULL AUTO_INCREMENT, `owner_id` int DEFAULT NULL, - `pid` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `status` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `class` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `pid` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `status` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `class` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `args` longtext COLLATE utf8mb4_unicode_ci COMMENT '(DC2Type:json_array)', `log` longtext COLLATE utf8mb4_unicode_ci, `started` datetime NOT NULL, @@ -85,13 +85,13 @@ CREATE TABLE `job` ( CREATE TABLE `media` ( `id` int NOT NULL, `item_id` int NOT NULL, - `ingester` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `renderer` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `ingester` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, + `renderer` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `data` longtext COLLATE utf8mb4_unicode_ci COMMENT '(DC2Type:json_array)', `source` longtext COLLATE utf8mb4_unicode_ci, `media_type` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `storage_id` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `extension` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `extension` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `sha256` char(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `size` bigint DEFAULT NULL, `has_original` tinyint(1) NOT NULL, @@ -114,7 +114,7 @@ CREATE TABLE `migration` ( CREATE TABLE `module` ( `id` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `is_active` tinyint(1) NOT NULL, - `version` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `version` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; CREATE TABLE `password_creation` ( @@ -150,7 +150,7 @@ CREATE TABLE `resource` ( `is_public` tinyint(1) NOT NULL, `created` datetime NOT NULL, `modified` datetime DEFAULT NULL, - `resource_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `resource_type` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`id`), KEY `IDX_BC91F4167E3C61F9` (`owner_id`), KEY `IDX_BC91F416448CC1BD` (`resource_class_id`), @@ -205,7 +205,7 @@ CREATE TABLE `resource_template_property` ( `data_type` longtext COLLATE utf8mb4_unicode_ci COMMENT '(DC2Type:json_array)', `is_required` tinyint(1) NOT NULL, `is_private` tinyint(1) NOT NULL, - `default_lang` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `default_lang` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `UNIQ_4689E2F116131EA549213EC` (`resource_template_id`,`property_id`), KEY `IDX_4689E2F116131EA` (`resource_template_id`), @@ -283,7 +283,7 @@ CREATE TABLE `site_page` ( `slug` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `title` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `is_public` tinyint(1) NOT NULL, - `layout` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `layout` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `layout_data` longtext COLLATE utf8mb4_unicode_ci COMMENT '(DC2Type:json)', `created` datetime NOT NULL, `modified` datetime DEFAULT NULL, @@ -351,8 +351,8 @@ CREATE TABLE `value` ( `property_id` int NOT NULL, `value_resource_id` int DEFAULT NULL, `value_annotation_id` int DEFAULT NULL, - `type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `lang` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `type` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, + `lang` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `value` longtext COLLATE utf8mb4_unicode_ci, `uri` longtext COLLATE utf8mb4_unicode_ci, `is_public` tinyint(1) NOT NULL, diff --git a/application/data/migrations/20240219000001_LimitFieldsTo190Characters.php b/application/data/migrations/20240219000001_LimitFieldsTo190Characters.php new file mode 100644 index 0000000000..9a9f4fd2d5 --- /dev/null +++ b/application/data/migrations/20240219000001_LimitFieldsTo190Characters.php @@ -0,0 +1,47 @@ +executeStatement($sql); + } +} diff --git a/application/src/Entity/Asset.php b/application/src/Entity/Asset.php index 4d558ccb25..c1889d0407 100644 --- a/application/src/Entity/Asset.php +++ b/application/src/Entity/Asset.php @@ -25,7 +25,7 @@ class Asset extends AbstractEntity protected $name; /** - * @Column + * @Column(length=190) */ protected $mediaType; @@ -35,7 +35,7 @@ class Asset extends AbstractEntity protected $storageId; /** - * @Column(nullable=true) + * @Column(nullable=true, length=190) */ protected $extension; diff --git a/application/src/Entity/Job.php b/application/src/Entity/Job.php index b3a2b417c6..90415dce47 100644 --- a/application/src/Entity/Job.php +++ b/application/src/Entity/Job.php @@ -36,17 +36,17 @@ class Job extends AbstractEntity protected $id; /** - * @Column(nullable=true) + * @Column(nullable=true, length=190) */ protected $pid; /** - * @Column(nullable=true) + * @Column(nullable=true, length=190) */ protected $status; /** - * @Column + * @Column(length=190) */ protected $class; diff --git a/application/src/Entity/Media.php b/application/src/Entity/Media.php index 090a9eb7b9..f6625b06c8 100644 --- a/application/src/Entity/Media.php +++ b/application/src/Entity/Media.php @@ -25,12 +25,12 @@ class Media extends Resource protected $id; /** - * @Column + * @Column(length=190) */ protected $ingester; /** - * @Column + * @Column(length=190) */ protected $renderer; @@ -55,7 +55,7 @@ class Media extends Resource protected $storageId; /** - * @Column(nullable=true) + * @Column(nullable=true, length=190) */ protected $extension; diff --git a/application/src/Entity/Module.php b/application/src/Entity/Module.php index 3cd46b4c21..28d85ba490 100644 --- a/application/src/Entity/Module.php +++ b/application/src/Entity/Module.php @@ -18,7 +18,7 @@ class Module extends AbstractEntity protected $isActive = false; /** - * @Column + * @Column(length=190) */ protected $version; diff --git a/application/src/Entity/Resource.php b/application/src/Entity/Resource.php index 390b1985d8..88aba6aea7 100644 --- a/application/src/Entity/Resource.php +++ b/application/src/Entity/Resource.php @@ -11,7 +11,7 @@ * * @Entity * @InheritanceType("JOINED") - * @DiscriminatorColumn(name="resource_type", type="string") + * @DiscriminatorColumn(name="resource_type", type="string", length=190) * @Table( * indexes={ * @Index( diff --git a/application/src/Entity/ResourceTemplateProperty.php b/application/src/Entity/ResourceTemplateProperty.php index b00fb463b6..96e07049a8 100644 --- a/application/src/Entity/ResourceTemplateProperty.php +++ b/application/src/Entity/ResourceTemplateProperty.php @@ -63,7 +63,7 @@ class ResourceTemplateProperty extends AbstractEntity protected $isPrivate = false; /** - * @Column(nullable=true) + * @Column(nullable=true, length=190) */ protected $defaultLang; diff --git a/application/src/Entity/SitePage.php b/application/src/Entity/SitePage.php index 68e7fceb63..81c0aba3c0 100644 --- a/application/src/Entity/SitePage.php +++ b/application/src/Entity/SitePage.php @@ -45,7 +45,7 @@ class SitePage extends AbstractEntity protected $isPublic = true; /** - * @Column(type="string", nullable=true) + * @Column(type="string", nullable=true, length=190) */ protected $layout; diff --git a/application/src/Entity/Value.php b/application/src/Entity/Value.php index 436463943b..dfa9ca675e 100644 --- a/application/src/Entity/Value.php +++ b/application/src/Entity/Value.php @@ -33,12 +33,12 @@ class Value extends AbstractEntity protected $property; /** - * @Column + * @Column(length=190) */ protected $type; /** - * @Column(nullable=true) + * @Column(nullable=true, length=190) */ protected $lang; From 3dcde0afb077f25a77226a4f2afeb2f18cc0ad89 Mon Sep 17 00:00:00 2001 From: Daniel Berthereau Date: Mon, 19 Feb 2024 00:00:00 +0000 Subject: [PATCH 3/3] Limited short labels to 190 unicode characters maximum to simplify indexation. --- application/data/install/schema.sql | 12 +++---- ...40219000002_LimitLabelsTo190Characters.php | 34 +++++++++++++++++++ application/src/Entity/ApiKey.php | 2 +- application/src/Entity/Asset.php | 2 +- application/src/Entity/Property.php | 2 +- application/src/Entity/ResourceClass.php | 2 +- .../src/Entity/ResourceTemplateProperty.php | 2 +- application/src/Entity/Vocabulary.php | 2 +- 8 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 application/data/migrations/20240219000002_LimitLabelsTo190Characters.php diff --git a/application/data/install/schema.sql b/application/data/install/schema.sql index 82d9188264..888d644279 100644 --- a/application/data/install/schema.sql +++ b/application/data/install/schema.sql @@ -2,7 +2,7 @@ SET FOREIGN_KEY_CHECKS = 0; CREATE TABLE `api_key` ( `id` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `owner_id` int NOT NULL, - `label` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `label` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `credential_hash` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL, `last_ip` varbinary(16) DEFAULT NULL COMMENT '(DC2Type:ip_address)', `last_accessed` datetime DEFAULT NULL, @@ -14,7 +14,7 @@ CREATE TABLE `api_key` ( CREATE TABLE `asset` ( `id` int NOT NULL AUTO_INCREMENT, `owner_id` int DEFAULT NULL, - `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `name` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `media_type` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `storage_id` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `extension` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, @@ -131,7 +131,7 @@ CREATE TABLE `property` ( `owner_id` int DEFAULT NULL, `vocabulary_id` int NOT NULL, `local_name` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `label` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `label` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `comment` longtext COLLATE utf8mb4_unicode_ci, PRIMARY KEY (`id`), UNIQUE KEY `UNIQ_8BF21CDEAD0E05F6623C14D5` (`vocabulary_id`,`local_name`), @@ -168,7 +168,7 @@ CREATE TABLE `resource_class` ( `owner_id` int DEFAULT NULL, `vocabulary_id` int NOT NULL, `local_name` varchar(190) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, - `label` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `label` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `comment` longtext COLLATE utf8mb4_unicode_ci, PRIMARY KEY (`id`), UNIQUE KEY `UNIQ_C6F063ADAD0E05F6623C14D5` (`vocabulary_id`,`local_name`), @@ -199,7 +199,7 @@ CREATE TABLE `resource_template_property` ( `id` int NOT NULL AUTO_INCREMENT, `resource_template_id` int NOT NULL, `property_id` int NOT NULL, - `alternate_label` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, + `alternate_label` varchar(190) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `alternate_comment` longtext COLLATE utf8mb4_unicode_ci, `position` int DEFAULT NULL, `data_type` longtext COLLATE utf8mb4_unicode_ci COMMENT '(DC2Type:json_array)', @@ -379,7 +379,7 @@ CREATE TABLE `vocabulary` ( `owner_id` int DEFAULT NULL, `namespace_uri` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `prefix` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, - `label` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + `label` varchar(190) COLLATE utf8mb4_unicode_ci NOT NULL, `comment` longtext COLLATE utf8mb4_unicode_ci, PRIMARY KEY (`id`), UNIQUE KEY `UNIQ_9099C97B9B267FDF` (`namespace_uri`), diff --git a/application/data/migrations/20240219000002_LimitLabelsTo190Characters.php b/application/data/migrations/20240219000002_LimitLabelsTo190Characters.php new file mode 100644 index 0000000000..755109978b --- /dev/null +++ b/application/data/migrations/20240219000002_LimitLabelsTo190Characters.php @@ -0,0 +1,34 @@ +executeStatement($sql); + } +} diff --git a/application/src/Entity/ApiKey.php b/application/src/Entity/ApiKey.php index 3661624e4c..16a482aedf 100644 --- a/application/src/Entity/ApiKey.php +++ b/application/src/Entity/ApiKey.php @@ -31,7 +31,7 @@ class ApiKey extends AbstractEntity protected $id; /** - * @Column + * @Column(length=190) */ protected $label; diff --git a/application/src/Entity/Asset.php b/application/src/Entity/Asset.php index c1889d0407..302a1aa5d3 100644 --- a/application/src/Entity/Asset.php +++ b/application/src/Entity/Asset.php @@ -20,7 +20,7 @@ class Asset extends AbstractEntity protected $owner; /** - * @Column + * @Column(length=190) */ protected $name; diff --git a/application/src/Entity/Property.php b/application/src/Entity/Property.php index c357bbb264..613374b432 100644 --- a/application/src/Entity/Property.php +++ b/application/src/Entity/Property.php @@ -44,7 +44,7 @@ class Property extends AbstractEntity protected $localName; /** - * @Column + * @Column(length=190) */ protected $label; diff --git a/application/src/Entity/ResourceClass.php b/application/src/Entity/ResourceClass.php index bf022cf16e..614c2a84ea 100644 --- a/application/src/Entity/ResourceClass.php +++ b/application/src/Entity/ResourceClass.php @@ -43,7 +43,7 @@ class ResourceClass extends AbstractEntity protected $localName; /** - * @Column + * @Column(length=190) */ protected $label; diff --git a/application/src/Entity/ResourceTemplateProperty.php b/application/src/Entity/ResourceTemplateProperty.php index 96e07049a8..bd1cfcae1b 100644 --- a/application/src/Entity/ResourceTemplateProperty.php +++ b/application/src/Entity/ResourceTemplateProperty.php @@ -33,7 +33,7 @@ class ResourceTemplateProperty extends AbstractEntity protected $property; /** - * @Column(nullable=true) + * @Column(nullable=true, length=190) */ protected $alternateLabel; diff --git a/application/src/Entity/Vocabulary.php b/application/src/Entity/Vocabulary.php index e0aaaaf77d..dc2d03b498 100644 --- a/application/src/Entity/Vocabulary.php +++ b/application/src/Entity/Vocabulary.php @@ -36,7 +36,7 @@ class Vocabulary extends AbstractEntity protected $prefix; /** - * @Column + * @Column(length=190) */ protected $label;