Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions AxialSqlTools/AxialSqlTools.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@
<Compile Include="Modules\SettingsManager.cs" />
<Compile Include="Modules\SQLBuilds.cs" />
<Compile Include="Modules\TsqlFormatter.cs" />
<Compile Include="Modules\TSqlParserFactory.cs" />
<Compile Include="Modules\WindowsCredentialHelper.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="AxialSqlToolsPackage.cs" />
Expand Down
4 changes: 2 additions & 2 deletions AxialSqlTools/Commands/SelectCurrentStatementCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ private void Execute(object sender, EventArgs e)
if (string.IsNullOrEmpty(fullText))
return;

// Try parsing with TSql170Parser
// Try parsing with the configured T-SQL parser
if (TrySelectWithParser(fullText, cursorLine, cursorColumn, selection))
return;

Expand All @@ -94,7 +94,7 @@ private bool TrySelectWithParser(string fullText, int cursorLine, int cursorColu
{
ThreadHelper.ThrowIfNotOnUIThread();

TSql170Parser sqlParser = new TSql170Parser(false);
TSqlParser sqlParser = TSqlParserFactory.Create(false);
IList<ParseError> parseErrors;
TSqlFragment fragment = sqlParser.Parse(new StringReader(fullText), out parseErrors);

Expand Down
2 changes: 1 addition & 1 deletion AxialSqlTools/Commands/ToggleBlockCommentCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ private bool TryFindEnclosingBlockComment(
openPosition = default(TextPosition);
closePosition = default(TextPosition);

var parser = new TSql170Parser(initialQuotedIdentifiers: true);
var parser = TSqlParserFactory.Create(initialQuotedIdentifiers: true);
IList<ParseError> errors;
IList<TSqlParserToken> tokens = parser.GetTokenStream(new StringReader(text), out errors);
foreach (TSqlParserToken token in tokens)
Expand Down
4 changes: 2 additions & 2 deletions AxialSqlTools/Modules/ScriptObjectDefinition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -244,14 +244,14 @@ SELECT PARSENAME(@FullName, 3) AS DatabaseName,
// additional format to make it pretty
if (selectedObject.TypeDesc == "USER_TABLE")
{
TSql170Parser sqlParser = new TSql170Parser(false);
TSqlParser sqlParser = TSqlParserFactory.Create(false);
IList<ParseError> parseErrors = new List<ParseError>();
TSqlFragment result = sqlParser.Parse(new StringReader(fullScriptResult), out parseErrors);

// leave it as is if for some reason we can't format it
if (parseErrors.Count == 0)
{
Sql170ScriptGenerator gen = new Sql170ScriptGenerator();
SqlScriptGenerator gen = TSqlParserFactory.CreateScriptGenerator();
gen.Options.AlignClauseBodies = false;
gen.Options.IncludeSemicolons = false;
gen.GenerateScript(result, out fullScriptResult);
Expand Down
61 changes: 61 additions & 0 deletions AxialSqlTools/Modules/SettingsManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,50 @@ public class SmtpSettings
public bool EnableSsl;
}


[JsonConverter(typeof(StringEnumConverter))]
public enum TSqlParserVersion
{
Sql80,
Sql90,
Sql100,
Sql110,
Sql120,
Sql130,
Sql140,
Sql150,
Sql160,
Sql170
}

public static string GetTSqlParserVersionDisplayName(TSqlParserVersion version)
{
switch (version)
{
case TSqlParserVersion.Sql80:
return "SQL Server 2000 (8.0)";
case TSqlParserVersion.Sql90:
return "SQL Server 2005 (9.0)";
case TSqlParserVersion.Sql100:
return "SQL Server 2008 (10.0)";
case TSqlParserVersion.Sql110:
return "SQL Server 2012 (11.0)";
case TSqlParserVersion.Sql120:
return "SQL Server 2014 (12.0)";
case TSqlParserVersion.Sql130:
return "SQL Server 2016 (13.0)";
case TSqlParserVersion.Sql140:
return "SQL Server 2017 (14.0)";
case TSqlParserVersion.Sql150:
return "SQL Server 2019 (15.0)";
case TSqlParserVersion.Sql160:
return "SQL Server 2022 (16.0)";
case TSqlParserVersion.Sql170:
default:
return "SQL Server 2025 (17.0)";
}
}

public enum SnippetReplaceKey
{
Enter,
Expand Down Expand Up @@ -550,6 +594,23 @@ public static bool SaveSmtpSettings(SmtpSettings smtpSettings)

}


public static TSqlParserVersion GetTSqlParserVersion()
{
string value = GetRegisterValue("TSqlParserVersion");
if (Enum.TryParse(value, out TSqlParserVersion version))
{
return version;
}

return TSqlParserVersion.Sql170;
}

public static bool SaveTSqlParserVersion(TSqlParserVersion version)
{
return SaveRegisterValue("TSqlParserVersion", version.ToString());
}

public static string GetTemplatesFolder()
{
var folder = GetRegisterValue("ScriptTemplatesFolder");
Expand Down
68 changes: 68 additions & 0 deletions AxialSqlTools/Modules/TSqlParserFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
using Microsoft.SqlServer.TransactSql.ScriptDom;

namespace AxialSqlTools
{
public static class TSqlParserFactory
{
public static TSqlParser Create(bool initialQuotedIdentifiers)
{
return Create(SettingsManager.GetTSqlParserVersion(), initialQuotedIdentifiers);
}

public static TSqlParser Create(SettingsManager.TSqlParserVersion version, bool initialQuotedIdentifiers)
{
switch (version)
{
case SettingsManager.TSqlParserVersion.Sql80:
return new TSql80Parser(initialQuotedIdentifiers);
case SettingsManager.TSqlParserVersion.Sql90:
return new TSql90Parser(initialQuotedIdentifiers);
case SettingsManager.TSqlParserVersion.Sql100:
return new TSql100Parser(initialQuotedIdentifiers);
case SettingsManager.TSqlParserVersion.Sql110:
return new TSql110Parser(initialQuotedIdentifiers);
case SettingsManager.TSqlParserVersion.Sql120:
return new TSql120Parser(initialQuotedIdentifiers);
case SettingsManager.TSqlParserVersion.Sql130:
return new TSql130Parser(initialQuotedIdentifiers);
case SettingsManager.TSqlParserVersion.Sql140:
return new TSql140Parser(initialQuotedIdentifiers);
case SettingsManager.TSqlParserVersion.Sql150:
return new TSql150Parser(initialQuotedIdentifiers);
case SettingsManager.TSqlParserVersion.Sql160:
return new TSql160Parser(initialQuotedIdentifiers);
case SettingsManager.TSqlParserVersion.Sql170:
default:
return new TSql170Parser(initialQuotedIdentifiers);
}
}

public static SqlScriptGenerator CreateScriptGenerator()
{
switch (SettingsManager.GetTSqlParserVersion())
{
case SettingsManager.TSqlParserVersion.Sql80:
return new Sql80ScriptGenerator();
case SettingsManager.TSqlParserVersion.Sql90:
return new Sql90ScriptGenerator();
case SettingsManager.TSqlParserVersion.Sql100:
return new Sql100ScriptGenerator();
case SettingsManager.TSqlParserVersion.Sql110:
return new Sql110ScriptGenerator();
case SettingsManager.TSqlParserVersion.Sql120:
return new Sql120ScriptGenerator();
case SettingsManager.TSqlParserVersion.Sql130:
return new Sql130ScriptGenerator();
case SettingsManager.TSqlParserVersion.Sql140:
return new Sql140ScriptGenerator();
case SettingsManager.TSqlParserVersion.Sql150:
return new Sql150ScriptGenerator();
case SettingsManager.TSqlParserVersion.Sql160:
return new Sql160ScriptGenerator();
case SettingsManager.TSqlParserVersion.Sql170:
default:
return new Sql170ScriptGenerator();
}
}
}
}
7 changes: 3 additions & 4 deletions AxialSqlTools/Modules/TsqlFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ public static string FormatCode(string oldCode, SettingsManager.TSqlCodeFormatSe
{
string resultCode = "";

TSql170Parser sqlParser = new TSql170Parser(false);
TSqlParser sqlParser = TSqlParserFactory.Create(false);

IList<ParseError> parseErrors = new List<ParseError>();
TSqlFragment result = sqlParser.Parse(new StringReader(oldCode), out parseErrors);
Expand All @@ -313,9 +313,8 @@ public static string FormatCode(string oldCode, SettingsManager.TSqlCodeFormatSe
formatSettings = settingsOverride;
}

Sql170ScriptGenerator gen = new Sql170ScriptGenerator();
SqlScriptGenerator gen = TSqlParserFactory.CreateScriptGenerator();
gen.Options.AlignClauseBodies = false;
gen.Options.SqlVersion = SqlVersion.Sql170; //TODO - try to get from current connection

if (formatSettings.preserveComments)
{
Expand All @@ -342,7 +341,7 @@ public static string FormatCode(string oldCode, SettingsManager.TSqlCodeFormatSe

}

private static string ApplySpecialFormat(string oldCode, TSql170Parser sqlParser, SettingsManager.TSqlCodeFormatSettings formatSettings)
private static string ApplySpecialFormat(string oldCode, TSqlParser sqlParser, SettingsManager.TSqlCodeFormatSettings formatSettings)
{
IList<ParseError> parseErrors = new List<ParseError>();

Expand Down
Loading