MySQL: compound time units (`YEAR_MONTH`, `DAY_HOUR`...) fail in `EXTRACT` and `INTERVAL`

Aberta
#2,693 0 comentários 0 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

  • #2700 de @princejain756 — fechado sem integrar

Avaliação

Dificuldade
2/5
Tempo estimado
1-3 horas
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Estagnada
Stack de tecnologia
rust, sql
Domínio
backend, databases

Direção de pesquisa

Start with the MySQL dialect handling for EXTRACT date/time fields and INTERVAL units, then inspect the parser tests for those expressions. Add coverage for the 11 listed compound units in both contexts; done means the supplied examples and tests parse successfully. An open linked pull request (#2700) already addresses this issue.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

MySQL

MySQL and MariaDB accept compound time units in EXTRACT and in INTERVAL expressions (DATE_ADD, DATE_SUB, + INTERVAL...). MySqlDialect rejects them, in 0.63.0 and on main:

use sqlparser::dialect::MySqlDialect;
use sqlparser::parser::Parser;

for sql in [
    "SELECT EXTRACT(YEAR_MONTH FROM d) FROM t",
    "SELECT DATE_ADD(d, INTERVAL '1-2' YEAR_MONTH) FROM t",
    "SELECT d + INTERVAL '1 2' DAY_HOUR FROM t",
] {
    println!("{:?}", Parser::parse_sql(&MySqlDialect {}, sql));
}
Err(ParserError("Expected: date/time field, found: YEAR_MONTH at Line: 1, Column: 16"))
Err(ParserError("INTERVAL requires a unit after the literal value at Line: 1, Column: 35"))
Err(ParserError("INTERVAL requires a unit after the literal value at Line: 1, Column: 27"))

The simple units (DAY, MONTH, QUARTER...) parse fine.

The compound units are the same 11 in MySQL and MariaDB:

SECOND_MICROSECOND, MINUTE_MICROSECOND, MINUTE_SECOND, HOUR_MICROSECOND, HOUR_SECOND, HOUR_MINUTE, DAY_MICROSECOND, DAY_SECOND, DAY_MINUTE, DAY_HOUR, YEAR_MONTH.

Thx,

Linguagem predominante
Rust
Estrelas
3.5k
Forks
805
Merge médio
2d 3h
PRs com merge (30d)
116

Preparar o ambiente

  • Sem Dockerfile nem arquivo Docker Compose
  • Tem um modelo de pull request
  • Sem guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de apache/datafusion-sqlparser-rs

Todas as issues de apache/datafusion-sqlparser-rs

Issues semelhantes

Mais issues de Rust

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.