No MySQL, se um identificador contém caracteres especiais ou é uma palavra reservada, você deve citá-lo sempre que se referir a ele. O caractere de aspas do identificador é o crase ( `
).
Palavras-chave não reservadas são permitidas como identificadores sem aspas. No entanto, é um hábito saudável citar todos os identificadores para evitar a colisão acidental com palavras – chave, palavras reservadas e nomes de funções integradas .
Não há problema em escrever consultas MySQL de linha única porque você pode usar aspas simples ou duplas, por exemplo
const = 'SELECT `p1`.`id`, `p1`.`name`, `t1`.`id` `tagId`, `t1`.`name` `tagName` FROM `page` `p1` INNER JOIN `page_tag` `pt1` ON `pt1`.`page_id` = `p1`.`id` GROUP BY `p1`.`id` HAVING COUNT(`pt1`.`id`) = 4';
No entanto, escrever uma consulta longa em uma única linha prejudica a legibilidade da consulta. Você não pode usar literais de modelo porque a sintaxe entra em conflito com o caractere de aspas do identificador MySQL.
Um proponente da sintaxe de literais de modelo irá argumentar que você pode escapar do caractere crase, por exemplo
const = `
SELECT
`p1`.`id`,
`p1`.`name`,
`t1`.`id` `tagId`,
`t1`.`name` `tagName`
FROM
`page` `p1`
INNER JOIN
`page_tag` `pt1`
ON
`pt1`.`page_id` = `p1`.`id`
GROUP BY
`p1`.`id`
HAVING
COUNT(`pt1`.`id`) = 4
`;
No entanto, essa abordagem tem várias desvantagens:
- Isso torna difícil ler a consulta.
- Você não pode copiar a consulta entre o IDE e um cliente SQL (como costuma ser o fluxo de trabalho).
Como resultado, a prática estabelecida para escrever consultas MySQL que abrangem várias linhas é armazená-las em um arquivo separado. Esta é uma boa abordagem, esp. para consultas muito longas. No entanto, às vezes você deseja ter consultas no arquivo, por exemplo, durante a prototipagem ou se você simplesmente preferir.
É aqui que babel-plugin-transform-jsx-element-to-string-literal
entra o. Você pode declarar qualquer consulta usando elementos JSX:
const = <sql>
SELECT
`p1`.`id`,
`p1`.`name`,
`t1`.`id` `tagId`,
`t1`.`name` `tagName`
FROM
`page` `p1`
INNER JOIN
`page_tag` `pt1`
ON
`pt1`.`page_id` = `p1`.`id`
GROUP BY
`p1`.`id`
HAVING
COUNT(`pt1`.`id`) = 4
</sql>;
Nota:
O exemplo acima está usando{"tagNames": ["sql"]}
configuração.