From 3c5a8655b40f0898057806690efbaa8583690cb4 Mon Sep 17 00:00:00 2001 From: Chris Wiitamaki Date: Wed, 28 Aug 2019 16:32:32 -0500 Subject: [PATCH 1/5] Modified library and console application: Added ability to add or remove brackets around names (schemas, tables, columns, aliases, etc.) --- .../GeneralLanguageContent.Designer.cs | 9 ++++++ .../GeneralLanguageContent.es.resx | 3 ++ .../GeneralLanguageContent.fr.resx | 5 ++++ .../GeneralLanguageContent.resx | 5 ++++ PoorMansTSqlFormatterCmdLine/Program.cs | 13 ++++++++- .../Formatters/TSqlStandardFormatter.cs | 28 ++++++++++++++++--- .../TSqlStandardFormatterOptions.cs | 12 ++++++-- 7 files changed, 68 insertions(+), 7 deletions(-) diff --git a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.Designer.cs b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.Designer.cs index 32153f7f..6028b9d6 100644 --- a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.Designer.cs +++ b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.Designer.cs @@ -105,6 +105,15 @@ internal static string FolderCreationFailureWarningMessage { } } + /// + /// Looks up a localized string similar to Cannot specify both 'ab' and 'rb'!. + /// + internal static string InvalidBracketsAroundNamesCombination { + get { + return ResourceManager.GetString("InvalidBracketsAroundNamesCombination", resourceCulture); + } + } + /// /// Looks up a localized string similar to No files found matching filename/pattern ({0}) and extension ({1}). /// diff --git a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.es.resx b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.es.resx index 26a1b7a4..d973a949 100644 --- a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.es.resx +++ b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.es.resx @@ -120,6 +120,9 @@ Hemos encontrado argumentos no reconocidos! + + InvalidBracketsAroundNamesCombination! + Copia de seguridad fallada: {0}{1} Saltando este archivo. {0} is the filename, {1} is a linebreak. diff --git a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx index ef2fde05..048cfa85 100644 --- a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx +++ b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx @@ -120,6 +120,9 @@ Paramètres inconnus trouvés! + + InvalidBracketsAroundNamesCombination! + Sauvegarde échouée: {0}{1} On saute la mise en forme pour ce fichier. {0} is the filename, {1} is a linebreak. @@ -181,6 +184,8 @@ ecl expandCommaLists (par défaut: vrai) eil expandInLists (par défaut: vrai) uk uppercaseKeywords (par défaut: vrai) sk standardizeKeywords (par défaut: faux) +ab addBracketsAroundNames (default: false) +rb removeBracketsAroundNames (default: false) ae allowParsingErrors (par défaut: faux) e extensions (par défaut: sql) r recursive (par défaut: faux) diff --git a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.resx b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.resx index 0848be9f..b3d8b34e 100644 --- a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.resx +++ b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.resx @@ -180,6 +180,8 @@ ecl expandCommaLists (default: true) eil expandInLists (default: true) uk uppercaseKeywords (default: true) sk standardizeKeywords (default: false) +ab addBracketsAroundNames (default: false) +rb removeBracketsAroundNames (default: false) ae allowParsingErrors (default: false) e extensions (default: sql) r recursive (default: false) @@ -204,6 +206,9 @@ echo select somecolumn from sometable | SqlFormatter Unrecognized arguments found! + + Cannot specify both 'ab' and 'rb'! + The provided Language Code is not supported. diff --git a/PoorMansTSqlFormatterCmdLine/Program.cs b/PoorMansTSqlFormatterCmdLine/Program.cs index 1d74cf4d..de4f90b2 100644 --- a/PoorMansTSqlFormatterCmdLine/Program.cs +++ b/PoorMansTSqlFormatterCmdLine/Program.cs @@ -57,7 +57,9 @@ static int Main(string[] args) ExpandCommaLists = true, BreakJoinOnSections = false, UppercaseKeywords = true, - ExpandInLists = true + ExpandInLists = true, + AddBracketsAroundNames = false, + RemoveBracketsAroundNames = false }; //bulk formatter options @@ -88,6 +90,8 @@ static int Main(string[] args) .Add("bjo|breakJoinOnSections", delegate(string v) { options.BreakJoinOnSections = v != null; }) .Add("uk|uppercaseKeywords", delegate(string v) { options.UppercaseKeywords = v != null; }) .Add("sk|standardizeKeywords", delegate(string v) { options.KeywordStandardization = v != null; }) + .Add("ab|addBracketsAroundNames", delegate (string v) { options.AddBracketsAroundNames = v != null; }) + .Add("rb|removeBracketsAroundNames", delegate (string v) { options.RemoveBracketsAroundNames = v != null; }) .Add("ae|allowParsingErrors", delegate(string v) { allowParsingErrors = v != null; }) .Add("e|extensions=", delegate(string v) { extensions.Add((v.StartsWith(".") ? "" : ".") + v); }) @@ -152,6 +156,13 @@ static int Main(string[] args) Console.Error.WriteLine(_generalResourceManager.GetString("UnrecognizedArgumentsErrorMessage")); } + // then check for incompatible settings + if (options.AddBracketsAroundNames && options.RemoveBracketsAroundNames) + { + showUsageError = true; + Console.Error.WriteLine(_generalResourceManager.GetString("InvalidBracketsAroundNamesCombination")); + } + if (extensions.Count == 0) extensions.Add(".sql"); diff --git a/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatter.cs b/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatter.cs index 86005967..8ae621ec 100644 --- a/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatter.cs +++ b/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatter.cs @@ -47,7 +47,7 @@ public TSqlStandardFormatter(TSqlStandardFormatterOptions options) } [Obsolete("Use the constructor with the TSqlStandardFormatterOptions parameter")] - public TSqlStandardFormatter(string indentString, int spacesPerTab, int maxLineWidth, bool expandCommaLists, bool trailingCommas, bool spaceAfterExpandedComma, bool expandBooleanExpressions, bool expandCaseStatements, bool expandBetweenConditions, bool breakJoinOnSections, bool uppercaseKeywords, bool htmlColoring, bool keywordStandardization) + public TSqlStandardFormatter(string indentString, int spacesPerTab, int maxLineWidth, bool expandCommaLists, bool trailingCommas, bool spaceAfterExpandedComma, bool expandBooleanExpressions, bool expandCaseStatements, bool expandBetweenConditions, bool breakJoinOnSections, bool uppercaseKeywords, bool htmlColoring, bool keywordStandardization, bool addBracketsAroundNames, bool removeBracketsAroundNames) { Options = new TSqlStandardFormatterOptions { @@ -63,7 +63,9 @@ public TSqlStandardFormatter(string indentString, int spacesPerTab, int maxLineW UppercaseKeywords = uppercaseKeywords, BreakJoinOnSections = breakJoinOnSections, HTMLColoring = htmlColoring, - KeywordStandardization = keywordStandardization + KeywordStandardization = keywordStandardization, + AddBracketsAroundNames = addBracketsAroundNames, + RemoveBracketsAroundNames = removeBracketsAroundNames }; if (keywordStandardization) @@ -534,7 +536,14 @@ private void ProcessSqlNode(Node contentElement, TSqlStandardFormattingState sta case SqlStructureConstants.ENAME_BRACKET_QUOTED_NAME: WhiteSpace_SeparateWords(state); - state.AddOutputContent("[" + contentElement.TextValue.Replace("]", "]]") + "]"); + if (Options.RemoveBracketsAroundNames) + { + state.AddOutputContent(contentElement.TextValue.Replace("[", "").Replace("]", "")); + } + else + { + state.AddOutputContent("[" + contentElement.TextValue.Replace("]", "]]") + "]"); + } state.WordSeparatorExpected = true; break; @@ -646,7 +655,18 @@ private void ProcessSqlNode(Node contentElement, TSqlStandardFormattingState sta case SqlStructureConstants.ENAME_MONETARY_VALUE: case SqlStructureConstants.ENAME_LABEL: WhiteSpace_SeparateWords(state); - state.AddOutputContent(contentElement.TextValue); + if (Options.AddBracketsAroundNames) + { + state.AddOutputContent("[" + contentElement.TextValue + "]"); + } + else if (Options.RemoveBracketsAroundNames) + { + state.AddOutputContent(contentElement.TextValue.Replace("[", "").Replace("]", "")); + } + else + { + state.AddOutputContent(contentElement.TextValue); + } state.WordSeparatorExpected = true; break; diff --git a/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatterOptions.cs b/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatterOptions.cs index 1df1310a..5cf67f46 100644 --- a/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatterOptions.cs +++ b/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatterOptions.cs @@ -47,6 +47,8 @@ public TSqlStandardFormatterOptions() ExpandInLists = true; NewClauseLineBreaks = 1; NewStatementLineBreaks = 2; + AddBracketsAroundNames = false; + RemoveBracketsAroundNames = false; } //Doesn't particularly need to be lazy-loaded, and doesn't need to be threadsafe. @@ -82,7 +84,9 @@ public TSqlStandardFormatterOptions(string serializedString) : this() { else if (key == "ExpandInLists") ExpandInLists = Convert.ToBoolean(value); else if (key == "NewClauseLineBreaks") NewClauseLineBreaks = Convert.ToInt32(value); else if (key == "NewStatementLineBreaks") NewStatementLineBreaks = Convert.ToInt32(value); - else throw new ArgumentException("Unknown option: " + key); + else if (key == "AddBracketsAroundNames") AddBracketsAroundNames = Convert.ToBoolean(value); + else if (key == "RemoveBracketsAroundNames") RemoveBracketsAroundNames = Convert.ToBoolean(value); + else throw new ArgumentException("Unknown option: " + key); } } @@ -111,7 +115,9 @@ public string ToSerializedString() if (NewClauseLineBreaks != _defaultOptions.NewClauseLineBreaks) overrides.Add("NewClauseLineBreaks", NewClauseLineBreaks.ToString()); if (NewStatementLineBreaks != _defaultOptions.NewStatementLineBreaks) overrides.Add("NewStatementLineBreaks", NewStatementLineBreaks.ToString()); NewStatementLineBreaks = 2; - + if (AddBracketsAroundNames != _defaultOptions.AddBracketsAroundNames) overrides.Add("AddBracketsAroundNames", AddBracketsAroundNames.ToString()); + if (RemoveBracketsAroundNames != _defaultOptions.RemoveBracketsAroundNames) overrides.Add("RemoveBracketsAroundNames", RemoveBracketsAroundNames.ToString()); + if (overrides.Count == 0) return string.Empty; return string.Join(",", overrides.Select((kvp) => kvp.Key + "=" + kvp.Value).ToArray()); @@ -145,6 +151,8 @@ public string IndentString public bool ExpandInLists { get; set; } public int NewClauseLineBreaks { get; set; } public int NewStatementLineBreaks { get; set; } + public bool AddBracketsAroundNames { get; set; } + public bool RemoveBracketsAroundNames { get; set; } } } From a9e1e7cc55e506834d0598783c8211c5dde17799 Mon Sep 17 00:00:00 2001 From: Chris Wiitamaki Date: Thu, 19 Sep 2019 15:59:55 -0500 Subject: [PATCH 2/5] Fixed so brackets are not placed around @Params. --- .../Formatters/TSqlStandardFormatter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatter.cs b/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatter.cs index 8ae621ec..5540073d 100644 --- a/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatter.cs +++ b/PoorMansTSqlFormatterLibShared/Formatters/TSqlStandardFormatter.cs @@ -655,7 +655,7 @@ private void ProcessSqlNode(Node contentElement, TSqlStandardFormattingState sta case SqlStructureConstants.ENAME_MONETARY_VALUE: case SqlStructureConstants.ENAME_LABEL: WhiteSpace_SeparateWords(state); - if (Options.AddBracketsAroundNames) + if (Options.AddBracketsAroundNames && !contentElement.TextValue.StartsWith("@")) { state.AddOutputContent("[" + contentElement.TextValue + "]"); } From 505784c20a4afbd2d69eedbc356c6239f0a82772 Mon Sep 17 00:00:00 2001 From: Chris Wiitamaki Date: Tue, 7 Jan 2020 13:59:47 -0600 Subject: [PATCH 3/5] Update PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx Co-Authored-By: AeroXuk --- PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx index 048cfa85..bc73ea07 100644 --- a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx +++ b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx @@ -185,7 +185,7 @@ eil expandInLists (par défaut: vrai) uk uppercaseKeywords (par défaut: vrai) sk standardizeKeywords (par défaut: faux) ab addBracketsAroundNames (default: false) -rb removeBracketsAroundNames (default: false) +rb removeBracketsAroundNames (par défaut: faux) ae allowParsingErrors (par défaut: faux) e extensions (par défaut: sql) r recursive (par défaut: faux) @@ -213,4 +213,4 @@ echo select unecolonnequelconque from untableauquelconque | SqlFormatter Aucun fichier d'entrée (ou tube/pipe) n'a été proportionné. - \ No newline at end of file + From 9a8a96d7a7fe59b42df7b2ebdbf242e3c262c863 Mon Sep 17 00:00:00 2001 From: Chris Wiitamaki Date: Tue, 7 Jan 2020 14:00:06 -0600 Subject: [PATCH 4/5] Update PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx Co-Authored-By: AeroXuk --- PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx index bc73ea07..375e1874 100644 --- a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx +++ b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.fr.resx @@ -184,7 +184,7 @@ ecl expandCommaLists (par défaut: vrai) eil expandInLists (par défaut: vrai) uk uppercaseKeywords (par défaut: vrai) sk standardizeKeywords (par défaut: faux) -ab addBracketsAroundNames (default: false) +ab addBracketsAroundNames (par défaut: faux) rb removeBracketsAroundNames (par défaut: faux) ae allowParsingErrors (par défaut: faux) e extensions (par défaut: sql) From eef7ba6ee3cfd05c2b4db2f2bef17c816a2f396e Mon Sep 17 00:00:00 2001 From: Chris Wiitamaki Date: Tue, 7 Jan 2020 15:12:45 -0600 Subject: [PATCH 5/5] Made requested pull request changes. --- PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.es.resx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.es.resx b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.es.resx index d973a949..a1948751 100644 --- a/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.es.resx +++ b/PoorMansTSqlFormatterCmdLine/GeneralLanguageContent.es.resx @@ -183,7 +183,9 @@ ecs expandCaseStatements (predeterminado: verdadero) ecl expandCommaLists (predeterminado: verdadero) ecl expandInLists (predeterminado: verdadero) uk uppercaseKeywords (predeterminado: verdadero) -sk standardizeKeywords (predeterminado: falso) +sk standardizeKeywords (predeterminado: falso) +ab addBracketsAroundNames (predeterminado: falso) +rb removeBracketsAroundNames (predeterminado: falso) ae allowParsingErrors (predeterminado: falso) e extensions (predeterminado: sql) r recursive (predeterminado: falso)