PostgreSqlDialect: `*=` and `@@@` are split into two tokens,
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 55/100
Línea de trabajo
Start by running the reproduction with PostgreSqlDialect and Parser::parse_sql on SELECT a *= b and SELECT a @@@ b, then find where the tokenizer groups operator characters into operator tokens. The issue lists the operators to support (*=, *<>, *<, *<=, *>, *>=, @@@) and the OPERATOR(pg_catalog.*=) form. Done means each statement parses as a single operator and to_string() round-trips without splitting.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
version 0.63.0, PostgreSqlDialect.
PostgreSQL's lexer reads a run of operator characters as one operator (manual, "Lexical Structure", "Operators"; src/backend/parser/scan.l). However, sqlparser only recognizes a specific list, so operators end up split.
The composite type comparison operators (manual, "Composite Type Comparison")::
SELECT a *= b -- Expected: an expression, found: =
SELECT a *<> b -- Expected: an expression, found: <>
SELECT a *< b -- Expected: an expression, found: <
SELECT a *<= b -- Expected: an expression, found: <=
SELECT a *> b -- Expected: an expression, found: >
SELECT a *>= b -- Expected: an expression, found: >=
The @@@ operator doesn't cause an error but is parsed incoretory.
SELECT a @@@ b -- parses as a @@ (@b); to_string() gives: SELECT a @@ @b
`SELECT 'a b'::tsvector @@@ 'a'::tsquery; -- t
SELECT 'a b'::tsvector @@ @ 'a'::tsquery; -- ERROR: operator does not exist
I ran into similar issues trying to write it as OPERATOR() which failed similiarly:
SELECT a OPERATOR(pg_catalog.*=) b -- Expected: ), found: =
SELECT a OPERATOR(pg_catalog.@@@) b -- Expected: ), found: @
The * operators are valid on PostgreSQL 18.6, on values of a record type:
SELECT a *= b, a = b, a *< b, a *<> b
FROM (SELECT ROW(1.0) a, ROW(1.00) b) s; -- f | t | f | t
How to reproduce:
use sqlparser::{dialect::PostgreSqlDialect, parser::Parser};
for sql in ["SELECT a *= b", "SELECT a @@@ b"] {
println!("{:?}", Parser::parse_sql(&PostgreSqlDialect {}, sql).map(|s| s
}
- 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
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/datafusion-sqlparser-rs
-
Redshift
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
apache/datafusion-sqlparser-rs#2959 ·
Los mantenedores suelen responder en 1 día
-
Redshift
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
apache/datafusion-sqlparser-rs#2958 ·
Los mantenedores suelen responder en 1 día
-
PostgreSQL
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
apache/datafusion-sqlparser-rs#2862 ·
Los mantenedores suelen responder en 1 día
-
PostgreSQL
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
apache/datafusion-sqlparser-rs#2861 ·
Los mantenedores suelen responder en 1 día
-
PostgreSQL
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
apache/datafusion-sqlparser-rs#2858 ·
Los mantenedores suelen responder en 1 día
Todos los issues de apache/datafusion-sqlparser-rs
Issues similares
-
P3
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
HerringtonDarkholme/hd-lang#1770 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
jonathanong/no-mistakes#3332 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
swc-project/swc-next-issues#310 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
swc-project/swc-ai-issues#653 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
lbjlaq/Antigravity-Manager#3937 ·
Los mantenedores suelen responder en 1 día