Unable to inherit 'SqlScriptGenerator' class
还没有人认领这个 Issue。
评估
调研方向
从 issue 中显示的 SqlScriptGenerator、SqlScriptGeneratorVisitor、ScriptWriter 和 Sql100ScriptGenerator 签名开始。检查当前如何构造 visitor 和 writer,然后确定外部子类能够编译所需的 public/protected API 更改。当自定义 SqlScriptGenerator 能够继承并 override visitor factory,而不依赖内部类型时,即视为完成。
由索引模型根据 Issue 内容生成。
描述
Is your feature request related to a problem? Please describe.
Consider the following code to inherit SqlScriptGenerator
internal class CustomSqlScriptGenerator : SqlScriptGenerator
{
public CustomSqlScriptGenerator(SqlScriptGeneratorOptions options) : base(options)
{
}
internal override SqlScriptGeneratorVisitor CreateSqlScriptGeneratorVisitor(SqlScriptGeneratorOptions options, ScriptWriter scriptWriter)
{
throw new NotImplementedException();
}
}
However, this will get compilation error because SqlScriptGeneratorVisitor and ScriptWriter are marked as internal, which is impossible to inherit this class.
Describe the solution you'd like
- Change
CreateSqlScriptGeneratorVisitor(...)becomeprotectedinstead ofinternal - Remove
ScriptWriterparameter inCreateSqlScriptGeneratorVisitor(...). This can avoid to markScriptWriteraspublic. Instantiation ofScriptWriterwill be handled by child class ofSqlScriptGenerator. See example below. - Mark
SqlScriptGeneratorVisitoras public accessible.SqlScriptGeneratorVisitorwill be used to visit the expression tree when generating TSQL script.
Here is the suggested changes:
protected abstract SqlScriptGeneratorVisitor CreateSqlScriptGeneratorVisitor(SqlScriptGeneratorOptions options);
And update Sql###ScriptGenerator become
Example:
public sealed class Sql100ScriptGenerator : SqlScriptGenerator
{
public Sql100ScriptGenerator()
: this(new SqlScriptGeneratorOptions())
{
}
public Sql100ScriptGenerator(SqlScriptGeneratorOptions options)
: base(options)
{
}
protected override SqlScriptGeneratorVisitor CreateSqlScriptGeneratorVisitor(SqlScriptGeneratorOptions options)
{
// Create instance of ScriptWriter.
//Currently this is created by private function in SqlScriptGenerator
ScriptWriter scriptWriter = new ScriptWriter(options);
ScriptGeneratorSupporter.CheckForNullReference((object) options, nameof (options));
ScriptGeneratorSupporter.CheckForNullReference((object) scriptWriter, nameof (scriptWriter));
return (SqlScriptGeneratorVisitor) new Sql100ScriptGeneratorVisitor(options, scriptWriter);
}
}
- 主要语言
- GAP
- 星标
- 277
- 派生
- 43
- 平均合并
- 6 天 17 小时
- 30 天内合并 PR
- 3
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
microsoft/SqlScriptDOM 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 84/100
microsoft/SqlScriptDOM#228 ·
-
难度 2/5 1-3 小时 新手友好度 62/100
microsoft/SqlScriptDOM#183 ·
-
难度 4/5 3-5 天 新手友好度 56/100
microsoft/SqlScriptDOM#226 · 1 个 reaction ·
-
难度 4/5 3-5 天 新手友好度 48/100
microsoft/SqlScriptDOM#225 ·
-
难度 3/5 1-2 天 新手友好度 58/100
microsoft/SqlScriptDOM#224 ·
查看 microsoft/SqlScriptDOM 的全部 Issue
相似的 Issue
-
难度 1/5 1 小时以内 新手友好度 75/100
-
bug
难度 2/5 1-3 小时 新手友好度 88/100
AstrBotDevs/AstrBot#10205 ·
-
难度 2/5 1-3 小时 新手友好度 72/100
-
难度 2/5 1-3 小时 新手友好度 70/100
OHDSI/Data2Evidence#3394 ·
-
难度 2/5 1-3 小时 新手友好度 84/100