Acabei de atualizar o servidor MariaDB de 10.6.10 para 10.6.15 em minha máquina de desenvolvimento e a tentativa de restaurar um dump SQL anteriormente funcional agora falha.
Aqui está um exemplo de consulta com falha:
CREATE TABLE `lin_98_41_strumenti_categorie` (
`id_categoria` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_azienda` int(10) unsigned NOT NULL DEFAULT 1,
`id_sede` int(10) unsigned NOT NULL DEFAULT 1,
`revisione_documento` int(10) unsigned NOT NULL DEFAULT 0,
`id_macchina` int(10) unsigned DEFAULT NULL,
`id_attrezzo` int(10) unsigned DEFAULT NULL,
`id_impianto` int(10) unsigned DEFAULT NULL,
`id_opera_provvisionale` int(10) unsigned DEFAULT NULL,
`tipo_strumento` char(1) GENERATED ALWAYS AS (concat_ws('',if(`id_macchina` is not null,'M',NULL),if(`id_attrezzo` is not null,'A',NULL),if(`id_impianto` is not null,'I',NULL),if(`id_opera_provvisionale` is not null,'O',NULL))) VIRTUAL,
PRIMARY KEY (`id_categoria`,`id_azienda`,`id_sede`,`revisione_documento`),
UNIQUE KEY `unique_id_macchina_lin_98_41_strumenti_categorie` (`id_macchina`,`id_azienda`,`id_sede`,`revisione_documento`),
UNIQUE KEY `unique_id_attrezzo_lin_98_41_strumenti_categorie` (`id_attrezzo`,`id_azienda`,`id_sede`,`revisione_documento`),
UNIQUE KEY `unique_id_impianto_lin_98_41_strumenti_categorie` (`id_impianto`,`id_azienda`,`id_sede`,`revisione_documento`),
UNIQUE KEY `unique_id_opera_provvisionale_lin_98_41_strumenti_categorie` (`id_opera_provvisionale`,`id_azienda`,`id_sede`,`revisione_documento`),
KEY `fk_main_lin_98_41_strumenti_categorie` (`id_azienda`,`id_sede`,`revisione_documento`),
CONSTRAINT `fk_id_attrezzo_lin_98_41_strumenti_categorie` FOREIGN KEY (`id_attrezzo`) REFERENCES `agews_attrezzi` (`id_attrezzo`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_id_impianto_lin_98_41_strumenti_categorie` FOREIGN KEY (`id_impianto`) REFERENCES `agews_impianti` (`id_impianto`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_id_macchina_lin_98_41_strumenti_categorie` FOREIGN KEY (`id_macchina`) REFERENCES `agews_macchine` (`id_macchina`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_id_opera_provvisionale_lin_98_41_strumenti_categorie` FOREIGN KEY (`id_opera_provvisionale`) REFERENCES `agews_opere_provvisionali` (`id_opera_provvisionale`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_main_lin_98_41_strumenti_categorie` FOREIGN KEY (`id_azienda`, `id_sede`, `revisione_documento`) REFERENCES `lin_98_41` (`id_azienda`, `id_sede`, `revisione_documento`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci;
O erro está no último GENERATED ALWAYS
campo marcado como STORED
, se eu alterar manualmente o tipo para VIRTUAL
funcionar.
O erro apenas diz:
ERRO 1901 (HY000) na linha 420329: A função ou expressão 'id_macchina' não pode ser usada na cláusula GENERATED ALWAYS AS de
tipo_strumento
mas não dá nenhuma indicação útil sobre por que não pode ser usado agora.
No entanto, este dump SQL funcionou sem modificações com a versão 10.6.10. É possível que tenha havido uma alteração tão incompatível com versões anteriores na versão 10.6 mais recente? Eu olhei as notas de lançamento, mas não encontrei nada que justificasse essa mudança significativa.