diff --git a/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdown.cs b/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdown.cs index 0a07d1c..fa6bf27 100644 --- a/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdown.cs +++ b/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdown.cs @@ -36,14 +36,8 @@ public class QueryBreakdown : SqlServerQueryBreakdown public QueryBreakdown(string selectClause, string fromClause, bool isMicrosoftSql = false) : base() { var parser = isMicrosoftSql ? Parser : PostgreSqlParserInstance; - - var cleanSelect = parser.ExtractSqlComments(selectClause, out var selectComments); - SelectClause.Clause = cleanSelect.Trim(); - SelectClause.Comment = selectComments.Count > 0 ? string.Join(" ", selectComments) : null; - - var cleanFrom = parser.ExtractSqlComments(fromClause, out var fromComments); - FromClause.Clause = cleanFrom.Trim(); - FromClause.Comment = fromComments.Count > 0 ? string.Join(" ", fromComments) : null; + parser.PopulateClauseWithComments(selectClause, SelectClause); + parser.PopulateClauseWithComments(fromClause, FromClause); } /// diff --git a/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdown.cs b/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdown.cs index 5eb2c9a..637a8f1 100644 --- a/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdown.cs +++ b/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdown.cs @@ -39,14 +39,8 @@ public class QueryBreakdown : SqlServerQueryBreakdown public QueryBreakdown(string selectClause, string fromClause, bool isMicrosoftSql = false) : base() { var parser = isMicrosoftSql ? Parser : SnowflakeParserInstance; - - var cleanSelect = parser.ExtractSqlComments(selectClause, out var selectComments); - SelectClause.Clause = cleanSelect.Trim(); - SelectClause.Comment = selectComments.Count > 0 ? string.Join(" ", selectComments) : null; - - var cleanFrom = parser.ExtractSqlComments(fromClause, out var fromComments); - FromClause.Clause = cleanFrom.Trim(); - FromClause.Comment = fromComments.Count > 0 ? string.Join(" ", fromComments) : null; + parser.PopulateClauseWithComments(selectClause, SelectClause); + parser.PopulateClauseWithComments(fromClause, FromClause); } /// diff --git a/src/Strata.SqlTools.SqlServer/Statements/StatementParser.cs b/src/Strata.SqlTools.SqlServer/Statements/StatementParser.cs index 6b751c2..c46da5a 100644 --- a/src/Strata.SqlTools.SqlServer/Statements/StatementParser.cs +++ b/src/Strata.SqlTools.SqlServer/Statements/StatementParser.cs @@ -140,6 +140,22 @@ public class StatementParser /// The SQL statement containing comments. /// The extracted comments as a list of strings. /// The SQL statement with comments removed. + /// + /// Runs on and assigns the + /// cleaned text to 's (trimmed) + /// and the merged comments to its . Helper for + /// dialect-specific QueryBreakdown constructors that need to ingest + /// comment-bearing SQL fragments. + /// + /// The SQL fragment to clean. + /// The clause to populate. + public void PopulateClauseWithComments(string rawText, ISqlClause target) + { + var clean = ExtractSqlComments(rawText, out var comments); + target.Clause = clean.Trim(); + target.Comment = comments.Count > 0 ? string.Join(" ", comments) : null; + } + #pragma warning disable S3776 // Cognitive Complexity of methods should not be too high #pragma warning disable S127 // "for" loop stop conditions should be invariant public virtual string ExtractSqlComments(string sql, out List comments)