MySQL caret binds below multiplication, changing a DataFusion query result

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

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

  • #2701 de @princejain756 — fechado sem integrar

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
72/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Ativa
Stack de tecnologia
rust, sql

Direção de pesquisa

Start with the generic precedence table in src/dialect/mod.rs and the MySQL dialect in src/dialect/mysql.rs, then compare their handling of Caret and MulDivModOp. Reproduce the expression from the issue using the MySQL dialect and inspect existing parser tests for precedence cases. Done when the MySQL expression groups as (2 ^ 3) * 4 and returns 4, with a regression test covering the precedence.

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

Descrição

MySQL

Reproduction

With datafusion==55.0.0:

from datafusion import SessionConfig, SessionContext

config = SessionConfig().set("datafusion.sql_parser.dialect", "MySQL")
batches = SessionContext(config).sql("SELECT 2 ^ 3 * 4").collect()
print(batches[0].column(0).to_pylist())

Observed on 2026-10-19: [14]. MySQL's precedence table ranks bitwise ^ above *, so the expression groups as (2 ^ 3) * 4 and yields 4. The observed result corresponds to 2 ^ (3 * 4).

The generic precedence table gives Caret a lower value than MulDivModOp, and the MySQL dialect does not override caret precedence. The same relative tiers remain on the default branch as of 2026-10-19. This is a MySQL-dialect parser discrepancy with an observed downstream query-result difference in DataFusion.

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.