microsoft / microsoft/sqlmanagementobjects
Internal Parser Error when trying to parse (legit) syntax
未关闭
还没有人认领这个 Issue。
- 主要语言
- C#
- 星标
- 143
- 派生
- 28
- PR 合并指标
- 30 天内没有已合并 PR
描述
Using the below SMO version:
<PackageReference Include="Microsoft.SqlServer.SqlManagementObjects" Version="161.46367.54" />
The below code throws SqlParserInternalParserError:
var sql = @"SELECT * FROM n as n1, e, n as n2 WHERE MATCH (n1-(e)->n2)";
Microsoft.SqlServer.Management.SqlParser.Parser.ParseOptions resultOptions;
var res = Microsoft.SqlServer.Management.SqlParser.Parser.Parser.Parse(sql,
new ParseOptions("GO",
true,
Microsoft.SqlServer.Management.SqlParser.Common.DatabaseCompatibilityLevel.Azure,
Microsoft.SqlServer.Management.SqlParser.Common.TransactSqlVersion.Azure),
out resultOptions);
Here is the associated call stack:
Unhandled exception. Microsoft.SqlServer.Management.SqlParser.SqlParserInternalParserError: Internal Parser Error
---> System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.SqlServer.Management.SqlParser.SqlCodeDom.SqlCodeObject.SetParentPointers()
at Microsoft.SqlServer.Management.SqlParser.SqlCodeDom.SqlCodeObject.SetParentPointers()
at Microsoft.SqlServer.Management.SqlParser.SqlCodeDom.SqlCodeObject.SetParentPointers()
at Microsoft.SqlServer.Management.SqlParser.SqlCodeDom.SqlCodeObject.SetParentPointers()
at Microsoft.SqlServer.Management.SqlParser.SqlCodeDom.SqlStatement.SetParentPointers()
at Microsoft.SqlServer.Management.SqlParser.SqlCodeDom.SqlCodeObject.SetParentPointers()
at Microsoft.SqlServer.Management.SqlParser.SqlCodeDom.SqlCodeObject.SetParentPointers()
at Microsoft.SqlServer.Management.SqlParser.Parser.Internals.VersionedParserBase.Parse(Boolean isIncremental, String sql, SqlScript prevScript, ParseOptions options, ParseOptions& resultOptions)
--- End of inner exception stack trace ---
at Microsoft.SqlServer.Management.SqlParser.Parser.Internals.VersionedParserBase.Parse(Boolean isIncremental, String sql, SqlScript prevScript, ParseOptions options, ParseOptions& resultOptions)
at Microsoft.SqlServer.Management.SqlParser.Parser.Parser.Parse(Boolean isIncremental, String sql, ParseResult prevResult, ParseOptions options, ParseOptions& resultOptions)
at Microsoft.SqlServer.Management.SqlParser.Parser.Parser.Parse(String sql, ParseOptions options, ParseOptions& resultOptions)
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 Parser.Parser.Parse 入口点以及提供的 SQL 语句和 ParseOptions 开始。通过 VersionedParserBase.Parse 和 SqlCodeDom.SqlCodeObject.SetParentPointers 跟踪故障,并使用调用堆栈识别 null 对象。当所示图查询能够在不出现 SqlParserInternalParserError 的情况下完成解析,并且有回归测试覆盖该情况时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- csharp, sql
- 领域
- compilers, databases
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100