apache / apache/datafusion-sqlparser-rs

Cannot parse table alias or cte alias in Postgres dialect

未关闭
#1,069 4 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Rust
星标
3.5k
派生
772
平均合并
4 天 9 小时
30 天内合并 PR
17

描述

Sorry for bothering you.
I'm using sqlparser = "0.40.0"
This is my code:
```rust
use sqlparser::dialect::PostgreSqlDialect;
use sqlparser::parser::{Parser, ParserError};

fn main() {
let dialect = PostgreSqlDialect {};

let sql1 = r#"
WITH existing AS (SELECT test_table.id FROM test_tables AS test_table WHERE (a = 12) AND (b = 34)),
inserted AS (INSERT INTO test_tables AS test_table (id, a, b, c) VALUES (DEFAULT, 56, 78, 90) ON CONFLICT (a, b)
DO UPDATE SET c = EXCLUDED.c WHERE (test_table.c != EXCLUDED.c)) SELECT c FROM existing"#;

let sql2 = "INSERT INTO test_tables AS test_table (id, a) VALUES (DEFAULT, 123) ON CONFLICT DO NOTHING RETURNING id";

let ast1 = Parser::parse_sql(&dialect, sql1);
match ast1 {
Ok(_) => {

}
Err(e) => {
println!("fail ast1: {}", e);
}
}
let ast2 = Parser::parse_sql(&dialect, sql2);
match ast2 {
Ok(_) => {
}
Err(e) => {
println!("fail ast2: {}", e);
}
}
}
```
error output:
```bash
fail ast1: sql parser error: Expected SELECT, VALUES, or a subquery in the query body, found: AS at Line: 3, Column 43
fail ast2: sql parser error: Expected SELECT, VALUES, or a subquery in the query body, found: AS at Line: 1, Column 25
```

Thank you!

贡献指南

这个仓库没有索引到贡献指南

调研方向

从 reproducer 中的 PostgreSqlDialect 和 Parser::parse_sql 调用开始,同时运行 sql1 和 sql2,以确认别名解析错误。跟踪 INSERT 语句和 CTE 查询体如何处理别名;完成标准是两条 PostgreSQL 语句都能成功解析,且不再出现报告的错误。

由索引模型根据 Issue 内容生成。

评估

技术栈
postgresql, rust
领域
databases
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。