Closed ScalaFirst closed 1 year ago
@ScalaFirst 欢迎 提 PR
grammar 源码:
https://github.com/DTStack/dt-sql-parser/tree/main/src/grammar/spark
编译 grammar: https://github.com/DTStack/dt-sql-parser/blob/main/CONTRIBUTING.md
运行 SparkSQL 测试
jest test/parser/spark
运行测试
yarn test
@ScalaFirst 欢迎 提 PR
- grammar 源码:
https://github.com/DTStack/dt-sql-parser/tree/main/src/grammar/spark
- 编译 grammar: https://github.com/DTStack/dt-sql-parser/blob/main/CONTRIBUTING.md
- 运行 SparkSQL 测试
jest test/parser/spark
- 运行测试
yarn test
我试了编译,结果发现编译出来的 Parser里,缺少了 ProgramContext 这个关键的context,我直接放弃了。 顺便请教一下,basic-parser-types 中的 CaretPosition 这个类 : export interface CaretPosition { /* start at 1 / lineNumber: number; /* start at 1 / column: number; } column 这个变量的含义是什么? 为什么我在传入这个值进行解析后,返回给我的tokenIndex是上一个表达式的? 例如: const sql = "select \n" + "substr(a,1) as c1 \n" + "from aaa t1 \n" + "left join bbb t2 \n" + "on t1.a" let tmp = parser.getSuggestionAtCaretPosition(sql,{ column:6, lineNumber:5 })
在 processCandidates 这个函数中, 我以为获取到的 caretTokenIndex 对应的文本是 "." ,结果对应的却是 "t1"。这让我很费解
@ScalaFirst 抱歉我回复的太晚了,不知道你对此是否对这个问题还有疑惑
caretPosition
中的 column
是指列,line
是指行,针对于上述sql中的 on t1.a
片段,column的位置如下图所示,虚线可以理解为编辑器光标位置
这里的思路是,当光标在t1
的后面时,光标仍属于前一个token
我试了编译,结果发现编译出来的 Parser里,缺少了 ProgramContext 这个关键的context,我直接放弃了。
@ScalaFirst 非常感谢你能尝试着贡献源码,这里缺少 ProgramContext
大概的原因可能是因为你修改了 grammar 源文件,在本仓库中所有的grammar文件的第一条规则都是 program
这个是不能修改或者删除的
比如sparksql grammar 文件
不知道你是否还有兴趣继续尝试PR
The Type of SQL 复现SQL : select t1.a,func( from fundx_ods.ods_test t1
Your Code parser.validate(sql)
Problem 使用当前的 parser 解析报错:' expecting {'MAP', 'REDUCE', 'SELECT'}"
}
{ startLine: 1, endLine: 1, startCol: 44, endCol: 49, message: "mismatched input '
使用真实的Spark运行报错: mismatched input 'fundx_ods' expecting {')', ',', '-'}(line 1, pos 23)
可能与grammar规则更新有关,现在的Spark g4文件是 https://github.com/apache/spark/blob/master/sql/catalyst/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBaseParser.g4
请问我该如何更新相应的parser