Suporte legado Mariadb

Suporte legado Mariadb

Eu tenho uma versão antiga do site php, que usa o número da coluna 'row_number' sem escape em suas consultas sql. Parece que na nova versão do mariadb foi adicionada uma nova função chamada "row_number ()" e, portanto, as consultas falham. Refatorar todo o projeto está fora de questão. Além disso, não quero encaixar tudo com uma versão mais antiga do mariadb. Existe uma maneira de usar o novo mariadb, mas também usar o conjunto de sintaxe/função mais antigo para que não haja colisão?

Obrigado.

Responder1

No Linux (ou similar), um único comando pode adicionar backtics em todos os seus arquivos.

Cuidado: Não use isso sem primeiro testar minuciosamente:

sed  -i  's/row_number/\`row_number\`/ig  *

Notas:

-i  -- update file in-place
\   -- need to avoid the backtics being acted on by the shell
i   -- ignore case
g   -- handle multiple occurrences in a line
*   -- change to specify the files that might need editing

Responder2

Uma maneira de contornar esse tipo de problema é usaro filtro de expressão regularem MariaDB MaxScale. Se você sabe que o aplicativo usa o ROW_NUMBERnome de alguma forma específica, você pode definir uma expressão regular que corresponda a ele e substituí-la pela versão citada.

A desvantagem óbvia dessa abordagem é que as expressões regulares são um tanto complicadas de acertar e não são fáceis de manter se o padrão a ser correspondido se tornar complexo. No entanto, isso pode permitir que seu aplicativo funcione enquanto você atualiza seu aplicativo para uma versão mais recente.

Aqui está um exemplo de como o filtro seria configurado:

[RegexFilter]
type=filter
module=regexfilter
match=/ROW_NUMBER/
replace=/`ROW_NUMBER`/

Responder3

Além disso, não quero encaixar tudo com uma versão mais antiga do mariadb.

Bom. Usar versões antigas indefinidamente é mais trabalhoso do que a maioria das pessoas imagina. As atualizações de segurança terminarão, você precisará encontrar uma alternativa, como comprar suporte de alguém que possa fazer backport de correções. O que é uma habilidade difícil de encontrar. E então você fica preso na versão antiga e não obtém novos recursos.

Existe uma maneira de usar o novo mariadb, mas também usar o conjunto de sintaxe/função mais antigo para que não haja colisão?

Não, row_number é uma função de janela queexiste em todas as versões suportadas do MariaDB. É uma pena que você tenha escolhido o nome primeiro, mas row_number é uma convenção entre implementações SQL.

A citação é uma sintaxe para resolver a ambiguidade, como você disse. Este seria um projeto de refatoração relativamente menor, sem mudança de comportamento e sem necessidade de mexer em dados ou esquema. Se os desenvolvedores do seu site não fizerem isso, que outras manutenções mais complexas o código não está conseguindo?

informação relacionada