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

Abierto
#2,693 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

  • #2700 de @princejain756 — cerrado sin fusionar

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
rust, sql

Línea de trabajo

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.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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,

Lenguaje dominante
Rust
Estrellas
3.5k
Forks
805
Merge medio
2 d 3 h
PR fusionados (30 d)
116

Preparar el entorno

  • Sin Dockerfile ni archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/datafusion-sqlparser-rs

Todos los issues de apache/datafusion-sqlparser-rs

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.