Encontrei esta resposta sobre como ter lógica condicional para execução de instruções mysql ( https://stackoverflow.com/a/7537348/627473 ). Parece funcionar muito bem.
Mas preciso encontrar uma maneira de executar o código para uma condição muito específica. O código só pode ser executado se o banco de dados oferecer suporte à indexação FULL TEXT para innodb. Isso acontece no mysql 5.6.4 ou superior. MAS eu também preciso que isso funcione para maria db outras bifurcações do mysql.
Tenho certeza de que poderia encontrar um caminho para a versão do mysql; mas eu realmente não gosto de confiar em uma versão e prefiro confiar na detecção de recursos.
Existe uma maneira de fazer isso?
EDIT: Aqui está o código. Eu só tenho mais erros que não tenho certeza se podem ser corrigidos.
No phpMyAdmin o erro "#2014 - Commands out of sync; you can't run this command now"
é exibido. Isso NÃO acontece na CLI. Existe uma maneira de contornar isso?
delimiter //
create procedure update_phppos()
begin
set @supports_ft := (SELECT COUNT(*) FROM information_schema.GLOBAL_VARIABLES WHERE Variable_name = 'innodb_ft_cache_size');
if @supports_ft > 0 then
REPLACE INTO `phppos_app_config` (`key`, `value`) VALUES ('version', '15.0');
else
SELECT 'An error has occured. You MUST have mysql 5.6.4 or higher to update php point of sale' as 'ERROR';
end if;
end;
//
delimiter ;
-- Execute the procedure
call update_phppos();
-- Drop the procedure
drop procedure update_phppos;
Plano A: observe como você pode comentar as coisas se a versão for mais antiga do que algo: (estou executando 5.6.12.)
Você pode ver muitos exemplos na saída de
mysqldump
.Plano B: você também pode analisar
@@version
dentro de um procedimento armazenado (ou código do cliente).Plano C: Ou, talvez este
EDIT: O único problema com isso é que ele só funciona com o usuário ROOT no mysql 5.7. Alguém sabe de outra forma?
Funciona no mysql 5.5,5.6,5.7