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(...) become protected instead of internal
Remove ScriptWriter parameter in CreateSqlScriptGeneratorVisitor(...). This can avoid to mark ScriptWriter as public. Instantiation of ScriptWriter will be handled by child class of SqlScriptGenerator. See example below.
Mark SqlScriptGeneratorVisitor as public accessible. SqlScriptGeneratorVisitor will be used to visit the expression tree when generating TSQL script.
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);
}
}
Is your feature request related to a problem? Please describe.
Consider the following code to inherit
SqlScriptGenerator
However, this will get compilation error because
SqlScriptGeneratorVisitor
andScriptWriter
are marked asinternal
, which is impossible to inherit this class.Describe the solution you'd like
CreateSqlScriptGeneratorVisitor(...)
becomeprotected
instead ofinternal
ScriptWriter
parameter inCreateSqlScriptGeneratorVisitor(...)
. This can avoid to markScriptWriter
aspublic
. Instantiation ofScriptWriter
will be handled by child class ofSqlScriptGenerator
. See example below.SqlScriptGeneratorVisitor
as public accessible.SqlScriptGeneratorVisitor
will be used to visit the expression tree when generating TSQL script.Here is the suggested changes:
And update
Sql###ScriptGenerator
becomeExample: