Views with CTEs parsed incorrectly
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 48/100
Direção de pesquisa
Comece pelo script test.php vinculado e reproduza a saída usando phpmyadmin/sql-parser 5.11.1. Rastreie como várias instruções CREATE VIEW contendo CTEs são analisadas; em seguida, adicione cobertura para a forma sem parênteses e verifique se cada view permanece separada e correta sem exigir parênteses.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Hi, parser has been working great for the most part but I ran into an issue today where I have multiple views with CTEs that get mixed together by the parser. I found that if I put parentheses around each view body definition the issue goes away, but MySQL does not require this.
Here is a minimal test script that demonstrates the issue:
test.php
Output from the test script on my machine follows. I am using phpmyadmin/sql-parser version 5.11.1 installed via composer.
-- SQL A:
CREATE VIEW view1 AS
WITH foo AS (SELECT abc FROM foo_table),
bar AS (SELECT id, xyz FROM bar_table)
SELECT foo.id AS id, foo.abc AS abc, bar.xyz AS xyz
FROM foo LEFT JOIN bar USING (id)
ORDER BY foo.abc, bar.xyz;
CREATE VIEW view2 AS
WITH foo AS (SELECT id, abc FROM foo_table),
bar AS (SELECT id, xyz FROM bar_table)
SELECT foo.id AS id, foo.abc AS abc, bar.xyz AS xyz
FROM foo LEFT JOIN bar USING (id)
ORDER BY foo.abc, bar.xyz;
-- Result A:
-- create VIEW view1
CREATE VIEW view1 AS WITH foo AS (SELECT abc FROM foo_table), bar AS (SELECT id, xyz FROM bar_table) SELECT foo.id AS `id`, foo.abc AS `abc`, bar.xyz AS `xyz` FROM foo LEFT JOIN bar USING (id) ORDER BY foo.abc ASC, bar.xyz ASCCREATE VIEW view2 AS WITH foo AS (SELECT id, abc FROM foo_table), bar AS (SELECT id, xyz FROM bar_table) SELECT foo.id AS `id`, foo.abc AS `abc`, bar.xyz AS `xyz` FROM foo LEFT JOIN bar USING (id) ORDER BY foo.abc ASC, bar.xyz ASC
-- SQL B:
CREATE VIEW view1 AS (
WITH foo AS (SELECT abc FROM foo_table),
bar AS (SELECT id, xyz FROM bar_table)
SELECT foo.id AS id, foo.abc AS abc, bar.xyz AS xyz
FROM foo LEFT JOIN bar USING (id)
ORDER BY foo.abc, bar.xyz);
CREATE VIEW view2 AS (
WITH foo AS (SELECT id, abc FROM foo_table),
bar AS (SELECT id, xyz FROM bar_table)
SELECT foo.id AS id, foo.abc AS abc, bar.xyz AS xyz
FROM foo LEFT JOIN bar USING (id)
ORDER BY foo.abc, bar.xyz);
-- Result B:
-- create VIEW view1
CREATE VIEW view1 AS (
WITH foo AS (SELECT abc FROM foo_table),
bar AS (SELECT id, xyz FROM bar_table)
SELECT foo.id AS id, foo.abc AS abc, bar.xyz AS xyz
FROM foo LEFT JOIN bar USING (id)
ORDER BY foo.abc, bar.xyz)
-- create VIEW view2
CREATE VIEW view2 AS (
WITH foo AS (SELECT id, abc FROM foo_table),
bar AS (SELECT id, xyz FROM bar_table)
SELECT foo.id AS id, foo.abc AS abc, bar.xyz AS xyz
FROM foo LEFT JOIN bar USING (id)
ORDER BY foo.abc, bar.xyz)
- Linguagem predominante
- PHP
- Estrelas
- 486
- Forks
- 120
- Merge médio
- 1d 17h
- PRs com merge (30d)
- 5
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de phpmyadmin/sql-parser
-
Invalid SQL syntax accepted: VARCHAR(X)Talvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
phpmyadmin/sql-parser#671 · 1 comentário ·
-
Missing space before UNION when building CREATE VIEWTalvez já em andamento @SAY-5 assumiu há 165 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
phpmyadmin/sql-parser#655 · 1 reação ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
phpmyadmin/sql-parser#666 ·
-
CTE parsing fails when name is a non-reserved keywordTalvez já em andamento @youdie006 assumiu há 61 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 65/100
phpmyadmin/sql-parser#662 · 2 reações ·
-
MariaDB and MySQL contextsTalvez já em andamento @MauricioFauth assumiu há 3 dias. Abertakind/support
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 45/100
phpmyadmin/sql-parser#653 · 1 reação · 1 responsável ·
Todas as issues de phpmyadmin/sql-parser
Issues semelhantes
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 84/100
WordPress/hosting-handbook#506 ·
Mantenedores costumam responder em até 2 dias
-
Installing a plugin with composer_packages installs dev dependencies and breaks the autoloader (Error 500)Talvez já em andamento @Boy132 assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 1 dia
-
nginx: static-file locations drop the security headers, and the dotfile deny is matched after themAbertabug Low Security
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
backdrop-contrib/commerce#60 ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 76/100