Bug 35451: Add record_table to additional_field_values

This patch updates the database to include a record_table field in the
additional_field_values table and adds an index on that field.

This should facilitate more performant joins.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Paul Derscheid <paul.derscheid@lmscloud.de>
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Martin Renvoize 2023-11-30 11:31:02 +00:00 committed by Lucas Gass
parent 882247a474
commit ddd8e697b4
No known key found for this signature in database
GPG Key ID: 60B447398B0D36CA
2 changed files with 43 additions and 0 deletions

View File

@ -0,0 +1,41 @@
use Modern::Perl;
return {
bug_number => "35451",
description => "Add record_table field and index to additional_field_values",
up => sub {
my ($args) = @_;
my ( $dbh, $out ) = @$args{qw(dbh out)};
unless ( column_exists( 'additional_field_values', 'record_table' ) ) {
$dbh->do(
q{
ALTER TABLE additional_field_values ADD record_table varchar(255) NOT NULL DEFAULT '' COMMENT 'tablename of the related record' AFTER field_id
}
);
$dbh->do(
q{
UPDATE
additional_field_values AS v
INNER JOIN
additional_fields AS f ON f.id = v.field_id
SET
v.record_table = f.tablename
}
);
say $out "Added column 'additional_field_values.record_table'";
}
unless ( index_exists( 'additional_field_values', 'record_table' ) ) {
$dbh->do(
q{
ALTER TABLE `additional_field_values`
ADD KEY `record_table` (`record_table`)
}
);
say $out "Added index 'record_table' to 'additional_field_values'";
}
},
};

View File

@ -247,10 +247,12 @@ DROP TABLE IF EXISTS `additional_field_values`;
CREATE TABLE `additional_field_values` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key identifier',
`field_id` int(11) NOT NULL COMMENT 'foreign key references additional_fields(id)',
`record_table` varchar(255) NOT NULL DEFAULT '' COMMENT 'tablename of the related record',
`record_id` varchar(80) NOT NULL DEFAULT '' COMMENT 'record_id',
`value` varchar(255) NOT NULL DEFAULT '' COMMENT 'value for this field',
PRIMARY KEY (`id`),
KEY `afv_fk` (`field_id`),
KEY `record_table` (`record_table`),
CONSTRAINT `afv_fk` FOREIGN KEY (`field_id`) REFERENCES `additional_fields` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;