Redshift dialect: `[...]` after an expression is a subscript, not a quoted identifier

未关闭
#2,960 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
半天
新手友好度
50/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
rust, sql

调研方向

Start from RedshiftSqlDialect and find where the tokenizer or dialect treats [ as the start of a delimited identifier. Run the query from the issue through the parser and confirm that the Word comes back with quote_style: Some('[') and the bracket contents as its value. Done means that [ after an expression parses as a subscript in the Redshift dialect, while bracket-quoted identifiers still work in dialects that use them, and a regression test covers the case.

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

描述

Redshift

RedshiftSqlDialect accepts [ as a delimited identifier quote. In Redshift, brackets after an expression index into a SUPER value, and identifiers are quoted only with double quotes.

select a[pg_backend_pid() - pg_backend_pid()] from (select json_parse('[1,2]') as a)
  • sqlparser 0.64.0: Word { value: "pg_backend_pid() - pg_backend_pid()", quote_style: Some('[') }; parses as SELECT a AS [pg_backend_pid() - pg_backend_pid()] FROM ....
  • Redshift: returns a = 1, i.e. a[0], so the bracket contents ran as an expression.

Docs: SUPER navigation (https://docs.aws.amazon.com/redshift/latest/dg/query-super.html) and identifier rules (https://docs.aws.amazon.com/redshift/latest/dg/r_names.html).

主要语言
Rust
星标
3.5k
派生
805
平均合并
2 天 3 小时
30 天内合并 PR
116

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 有 Pull Request 模板
  • 没有贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

apache/datafusion-sqlparser-rs 的其他 Issue

查看 apache/datafusion-sqlparser-rs 的全部 Issue

相似的 Issue

更多 Rust Issue

把新 issue 发到你的邮箱

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