Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Unable to inherit 'SqlScriptGenerator' class

Offen
#42 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Feature
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
csharp, sql
Bereich
databases

Rechercherichtung

Beginne mit den im Issue gezeigten Signaturen von SqlScriptGenerator, SqlScriptGeneratorVisitor, ScriptWriter und Sql100ScriptGenerator. Überprüfe, wie Visitor und Writer derzeit erstellt werden, und ermittle anschließend die erforderlichen Änderungen an der öffentlichen/geschützten API, damit eine externe Unterklasse kompiliert werden kann. Erledigt ist dies, wenn ein benutzerdefiniertes SqlScriptGenerator erben und die Visitor-Factory überschreiben kann, ohne sich auf interne Typen zu stützen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

enhancement

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.

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);
    }
}
Vorherrschende Sprache
GAP
Sterne
277
Forks
43
Ø Merge
6 T. 17 Std.
Gemergte PRs (30 T.)
3

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus microsoft/SqlScriptDOM

Alle Issues in microsoft/SqlScriptDOM

Ähnliche Issues

Weitere Issues zu Databases

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.