diff --git a/src/Strata.SqlTools.LinqToSql/Breakdowns/LinqQueryBreakdown.cs b/src/Strata.SqlTools.LinqToSql/Breakdowns/LinqQueryBreakdown.cs index aadafed..d7074cd 100644 --- a/src/Strata.SqlTools.LinqToSql/Breakdowns/LinqQueryBreakdown.cs +++ b/src/Strata.SqlTools.LinqToSql/Breakdowns/LinqQueryBreakdown.cs @@ -14,7 +14,6 @@ namespace Strata.SqlTools.Breakdowns.LinqToSql; /// SELECT, WHERE, JOIN, GROUP BY, and ORDER BY clauses, making them accessible /// through the QueryBreakdown interface. /// -[Serializable] public class LinqQueryBreakdown : QueryBreakdown { /// diff --git a/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdown.cs b/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdown.cs index 54f187c..30d2f74 100644 --- a/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdown.cs +++ b/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdown.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Runtime.Serialization; using Strata.SqlTools.SqlBreakdown.Expressions; using Strata.SqlTools.SqlBreakdown.Interfaces.Core; using CommandVisitor = Strata.SqlTools.Visitors.PostgreSql.CommandVisitor; @@ -15,7 +14,6 @@ namespace Strata.SqlTools.Breakdowns.PostgreSql; /// Represents a PostgreSQL query breakdown with all clauses, following PostgreSQL SQL standards. /// Handles positional parameters using $1, $2, ... syntax for parameterized queries. /// -[Serializable] public class QueryBreakdown : SqlServerQueryBreakdown { private const string ExpressionNullErrorMessage = "Expression cannot be null."; @@ -89,14 +87,6 @@ public class QueryBreakdown : SqlServerQueryBreakdown } } - /// - /// Re-establishes invariants after deserialization, since deserialization bypasses the - /// constructors that normally initialize the breakdown's clause state (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) => RevalidateBreakdownState(); - /// /// Adds a parameter to the query using PostgreSQL's positional parameter format ($1, $2, ...). /// diff --git a/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdownCollection.cs b/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdownCollection.cs index 5a1b308..d0a15f2 100644 --- a/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdownCollection.cs +++ b/src/Strata.SqlTools.PostgreSql/Breakdowns/QueryBreakdownCollection.cs @@ -1,4 +1,3 @@ -using System.Runtime.Serialization; using System.Text; using Strata.SqlTools.SqlBreakdown.Classes; using Strata.SqlTools.SqlBreakdown.Interfaces; @@ -13,7 +12,6 @@ namespace Strata.SqlTools.Breakdowns.PostgreSql; /// including support for PostgreSQL features like schema-qualified identifiers, /// LIMIT/OFFSET clauses, parameterized queries using $1, $2 syntax, and CTEs. /// -[Serializable] public class QueryBreakdownCollection : SqlBreakdownCollection { private readonly List _queryBreakdowns; @@ -36,20 +34,6 @@ public class QueryBreakdownCollection : SqlBreakdownCollection _queryBreakdowns = queryBreakdowns?.ToList() ?? new List(); } - /// - /// Validates that the backing list survived deserialization, since deserialization bypasses - /// the constructors that normally initialize it (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) - { - if (_queryBreakdowns is null) - { - throw new SerializationException("Deserialized QueryBreakdownCollection is missing its backing list."); - } - } - /// /// Gets the collection of QueryBreakdown objects. /// diff --git a/src/Strata.SqlTools.Snowflake/Breakdowns/DeleteBreakdown.cs b/src/Strata.SqlTools.Snowflake/Breakdowns/DeleteBreakdown.cs index 3bfb2b6..9e2cfeb 100644 --- a/src/Strata.SqlTools.Snowflake/Breakdowns/DeleteBreakdown.cs +++ b/src/Strata.SqlTools.Snowflake/Breakdowns/DeleteBreakdown.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Runtime.Serialization; using System.Text; using SqlServerDeleteBreakdown = Strata.SqlTools.Breakdowns.SqlServer.DeleteBreakdown; using StatementParser = Strata.SqlTools.Statements.Snowflake.StatementParser; @@ -9,7 +8,6 @@ namespace Strata.SqlTools.Breakdowns.Snowflake; /// /// Represents a DELETE SQL statement breakdown with FROM and WHERE clauses for Snowflake. /// -[Serializable] public class DeleteBreakdown : SqlServerDeleteBreakdown { private static readonly StatementParser SnowflakeParserInstance = new StatementParser(); @@ -41,14 +39,6 @@ public class DeleteBreakdown : SqlServerDeleteBreakdown WhereClause.Comment = whereComments.Count > 0 ? string.Join(" ", whereComments) : null; } - /// - /// Re-establishes invariants after deserialization, since deserialization bypasses the - /// constructors that normally initialize the breakdown's clause state (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) => RevalidateBreakdownState(); - /// /// Gets the SQL breakdown as a string for Snowflake. /// diff --git a/src/Strata.SqlTools.Snowflake/Breakdowns/InsertBreakdown.cs b/src/Strata.SqlTools.Snowflake/Breakdowns/InsertBreakdown.cs index eff1562..d719ad9 100644 --- a/src/Strata.SqlTools.Snowflake/Breakdowns/InsertBreakdown.cs +++ b/src/Strata.SqlTools.Snowflake/Breakdowns/InsertBreakdown.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Runtime.Serialization; using Strata.SqlTools.SqlBreakdown.Utilities; using SqlServerInsertBreakdown = Strata.SqlTools.Breakdowns.SqlServer.InsertBreakdown; using StatementParser = Strata.SqlTools.Statements.Snowflake.StatementParser; @@ -9,7 +8,6 @@ namespace Strata.SqlTools.Breakdowns.Snowflake; /// /// Represents an INSERT SQL statement breakdown with column and value clauses for Snowflake. /// -[Serializable] public class InsertBreakdown : SqlServerInsertBreakdown { private static readonly StatementParser SnowflakeParserInstance = new StatementParser(); @@ -66,14 +64,6 @@ public class InsertBreakdown : SqlServerInsertBreakdown ValuesClause.Clause = string.Join(",", valuesList); } - /// - /// Re-establishes invariants after deserialization, since deserialization bypasses the - /// constructors that normally initialize the breakdown's clause state (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) => RevalidateBreakdownState(); - #region Parse Methods /// diff --git a/src/Strata.SqlTools.Snowflake/Breakdowns/ProcedureBreakdown.cs b/src/Strata.SqlTools.Snowflake/Breakdowns/ProcedureBreakdown.cs index cb2c65b..e445b9a 100644 --- a/src/Strata.SqlTools.Snowflake/Breakdowns/ProcedureBreakdown.cs +++ b/src/Strata.SqlTools.Snowflake/Breakdowns/ProcedureBreakdown.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Runtime.Serialization; using System.Text; using SqlServerProcedureBreakdown = Strata.SqlTools.Breakdowns.SqlServer.ProcedureBreakdown; using StatementParser = Strata.SqlTools.Statements.Snowflake.StatementParser; @@ -9,7 +8,6 @@ namespace Strata.SqlTools.Breakdowns.Snowflake; /// /// Represents a Snowflake stored procedure call breakdown with procedure name and parameters. /// -[Serializable] public class ProcedureBreakdown : SqlServerProcedureBreakdown { private static readonly StatementParser SnowflakeParserInstance = new StatementParser(); @@ -47,15 +45,6 @@ public class ProcedureBreakdown : SqlServerProcedureBreakdown Parameters = parameters ?? new Dictionary(); } - /// - /// Re-establishes invariants after deserialization, since deserialization bypasses the - /// constructors that normally initialize the procedure name and parameter collection - /// (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) => RevalidateBreakdownState(); - /// /// Gets the SQL breakdown as a string for Snowflake. /// diff --git a/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdown.cs b/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdown.cs index de946fd..4ee4c10 100644 --- a/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdown.cs +++ b/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdown.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Runtime.Serialization; using System.Text; using Strata.SqlTools.SqlBreakdown.Classes; using Strata.SqlTools.SqlBreakdown.Expressions; @@ -19,7 +18,6 @@ namespace Strata.SqlTools.Breakdowns.Snowflake; /// Represents a Snowflake SQL query breakdown with all clauses, following Snowflake SQL standards. /// Handles both :parameter and @parameter syntax for Snowflake compatibility. /// -[Serializable] public class QueryBreakdown : SqlServerQueryBreakdown { private const string ExpressionNullErrorMessage = "Expression cannot be null."; @@ -86,14 +84,6 @@ public class QueryBreakdown : SqlServerQueryBreakdown OrderByClause.Comment = orderByComments.Count > 0 ? string.Join(" ", orderByComments) : null; } - /// - /// Re-establishes invariants after deserialization, since deserialization bypasses the - /// constructors that normally initialize the breakdown's clause state (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) => RevalidateBreakdownState(); - /// /// Adds a parameter to the query using Snowflake's :param format. /// Also adds @param format for compatibility. diff --git a/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdownCollection.cs b/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdownCollection.cs index 062f0eb..9a033a2 100644 --- a/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdownCollection.cs +++ b/src/Strata.SqlTools.Snowflake/Breakdowns/QueryBreakdownCollection.cs @@ -1,4 +1,3 @@ -using System.Runtime.Serialization; using System.Text; using Strata.SqlTools.SqlBreakdown.Classes; using Strata.SqlTools.SqlBreakdown.Interfaces; @@ -14,7 +13,6 @@ namespace Strata.SqlTools.Breakdowns.Snowflake; /// time travel, snowflake-specific parameters (:parameter and @parameter syntax), /// and proper batch handling. /// -[Serializable] public class QueryBreakdownCollection : SqlBreakdownCollection { private readonly List _queryBreakdowns; @@ -37,20 +35,6 @@ public class QueryBreakdownCollection : SqlBreakdownCollection _queryBreakdowns = new List(queryBreakdowns ?? Enumerable.Empty()); } - /// - /// Validates that the backing list survived deserialization, since deserialization bypasses - /// the constructors that normally initialize it (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) - { - if (_queryBreakdowns is null) - { - throw new SerializationException("Deserialized QueryBreakdownCollection is missing its backing list."); - } - } - /// /// Gets the collection of QueryBreakdown objects. /// diff --git a/src/Strata.SqlTools.Snowflake/Breakdowns/UpdateBreakdown.cs b/src/Strata.SqlTools.Snowflake/Breakdowns/UpdateBreakdown.cs index 21e5341..f0fcc00 100644 --- a/src/Strata.SqlTools.Snowflake/Breakdowns/UpdateBreakdown.cs +++ b/src/Strata.SqlTools.Snowflake/Breakdowns/UpdateBreakdown.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Runtime.Serialization; using System.Text; using SqlServerUpdateBreakdown = Strata.SqlTools.Breakdowns.SqlServer.UpdateBreakdown; using StatementParser = Strata.SqlTools.Statements.Snowflake.StatementParser; @@ -9,7 +8,6 @@ namespace Strata.SqlTools.Breakdowns.Snowflake; /// /// Represents an UPDATE SQL statement breakdown with SET, FROM, and WHERE clauses for Snowflake. /// -[Serializable] public class UpdateBreakdown : SqlServerUpdateBreakdown { private static readonly StatementParser SnowflakeParserInstance = new StatementParser(); @@ -46,14 +44,6 @@ public class UpdateBreakdown : SqlServerUpdateBreakdown WhereClause.Comment = whereComments.Count > 0 ? string.Join(" ", whereComments) : null; } - /// - /// Re-establishes invariants after deserialization, since deserialization bypasses the - /// constructors that normally initialize the breakdown's clause state (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) => RevalidateBreakdownState(); - /// /// Gets the SQL breakdown as a string for Snowflake. /// diff --git a/src/Strata.SqlTools.SqlBreakdown/Classes/QueryParam.cs b/src/Strata.SqlTools.SqlBreakdown/Classes/QueryParam.cs index 1bb44bf..0a45bb1 100644 --- a/src/Strata.SqlTools.SqlBreakdown/Classes/QueryParam.cs +++ b/src/Strata.SqlTools.SqlBreakdown/Classes/QueryParam.cs @@ -5,7 +5,6 @@ namespace Strata.SqlTools.SqlBreakdown.Classes; /// /// Represents a query parameter with a name and value. /// -[Serializable] public sealed class QueryParam : IQueryParam { /// diff --git a/src/Strata.SqlTools.SqlBreakdown/Classes/RawSqlBreakdown.cs b/src/Strata.SqlTools.SqlBreakdown/Classes/RawSqlBreakdown.cs index b29bee0..24b40af 100644 --- a/src/Strata.SqlTools.SqlBreakdown/Classes/RawSqlBreakdown.cs +++ b/src/Strata.SqlTools.SqlBreakdown/Classes/RawSqlBreakdown.cs @@ -10,7 +10,6 @@ namespace Strata.SqlTools.SqlBreakdown.Classes; /// This class is primarily used for batch SQL parsing where raw statements need to be stored /// without detailed clause breakdown. Actual clause parsing can be performed separately. /// -[Serializable] public class RawSqlBreakdown : ISqlBreakdown { /// diff --git a/src/Strata.SqlTools.SqlBreakdown/Classes/SqlBreakdownBase.cs b/src/Strata.SqlTools.SqlBreakdown/Classes/SqlBreakdownBase.cs index 18252f9..08380f5 100644 --- a/src/Strata.SqlTools.SqlBreakdown/Classes/SqlBreakdownBase.cs +++ b/src/Strata.SqlTools.SqlBreakdown/Classes/SqlBreakdownBase.cs @@ -7,7 +7,6 @@ namespace Strata.SqlTools.SqlBreakdown.Classes; /// /// Base class for SQL query breakdowns that provides common setup/finish clause handling and cloning. /// -[Serializable] public abstract class SqlBreakdownBase : ISqlBreakdown { /// @@ -48,18 +47,6 @@ public abstract class SqlBreakdownBase : ISqlBreakdown /// public bool IsUsingFinishClause => FinishClauses.Count > 0; - /// - /// Re-establishes the invariants normally guaranteed by the constructors after the object - /// is reconstructed by deserialization. Deserialization bypasses constructors, so the - /// collection state must be re-validated to avoid a partially-initialized object - /// (SonarQube rule S5766). - /// - protected void RevalidateBreakdownState() - { - SetupClauses ??= new List(); - FinishClauses ??= new ArrayList(); - } - /// /// Gets the SQL breakdown as a string. Must be implemented by derived classes. /// diff --git a/src/Strata.SqlTools.SqlBreakdown/Classes/SqlBreakdownCollection.cs b/src/Strata.SqlTools.SqlBreakdown/Classes/SqlBreakdownCollection.cs index 9ecd6cf..ae378df 100644 --- a/src/Strata.SqlTools.SqlBreakdown/Classes/SqlBreakdownCollection.cs +++ b/src/Strata.SqlTools.SqlBreakdown/Classes/SqlBreakdownCollection.cs @@ -1,4 +1,3 @@ -using System.Runtime.Serialization; using System.Text; using Strata.SqlTools.SqlBreakdown.Interfaces; using Strata.SqlTools.SqlBreakdown.Interfaces.QueryEngine; @@ -13,7 +12,6 @@ namespace Strata.SqlTools.SqlBreakdown.Classes; /// allowing efficient management and retrieval of multiple SQL breakdowns as a unified collection. /// Implements ICollection<ISqlBreakdown> to provide standard collection semantics and LINQ support. /// -[Serializable] public class SqlBreakdownCollection : ICollection { private readonly List _breakdowns; @@ -36,20 +34,6 @@ public class SqlBreakdownCollection : ICollection _breakdowns = new List(breakdowns ?? Enumerable.Empty()); } - /// - /// Validates that the backing list survived deserialization, since deserialization bypasses - /// the constructors that normally initialize it (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) - { - if (_breakdowns is null) - { - throw new SerializationException("Deserialized SqlBreakdownCollection is missing its backing list."); - } - } - /// /// Gets the collection of SQL breakdowns. /// diff --git a/src/Strata.SqlTools.SqlBreakdown/Classes/SqlFilter.cs b/src/Strata.SqlTools.SqlBreakdown/Classes/SqlFilter.cs index 17bea2b..3de4626 100644 --- a/src/Strata.SqlTools.SqlBreakdown/Classes/SqlFilter.cs +++ b/src/Strata.SqlTools.SqlBreakdown/Classes/SqlFilter.cs @@ -1,4 +1,3 @@ -using System.Runtime.Serialization; using System.Text; using Strata.SqlTools.SqlBreakdown.Interfaces.Core; @@ -8,7 +7,6 @@ namespace Strata.SqlTools.SqlBreakdown.Classes; /// Represents a SQL filter with an expression and parameters. /// Implements SQL appendable and SQL interfaces for query building. /// -[Serializable] public class SqlFilter : ISqlAppendable { private readonly StringBuilder _sqlExpression; @@ -59,21 +57,6 @@ public class SqlFilter : ISqlAppendable } } - /// - /// Validates that the expression and parameter state survived deserialization, since - /// deserialization bypasses the constructors that normally initialize them and enforce the - /// even parameter-name/value pairing (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) - { - if (_sqlExpression is null || _parameterValues is null) - { - throw new SerializationException("Deserialized SqlFilter is missing its expression or parameter state."); - } - } - /// /// Gets or sets the SQL expression. /// diff --git a/src/Strata.SqlTools.SqlServer/Breakdowns/DeleteBreakdown.cs b/src/Strata.SqlTools.SqlServer/Breakdowns/DeleteBreakdown.cs index fd8c44b..03b2f46 100644 --- a/src/Strata.SqlTools.SqlServer/Breakdowns/DeleteBreakdown.cs +++ b/src/Strata.SqlTools.SqlServer/Breakdowns/DeleteBreakdown.cs @@ -8,7 +8,6 @@ namespace Strata.SqlTools.Breakdowns.SqlServer; /// /// Represents a DELETE SQL statement breakdown with FROM and WHERE clauses for SQL Server. /// -[Serializable] public class DeleteBreakdown : SqlBreakdownBase { protected readonly StatementParser Parser; diff --git a/src/Strata.SqlTools.SqlServer/Breakdowns/InsertBreakdown.cs b/src/Strata.SqlTools.SqlServer/Breakdowns/InsertBreakdown.cs index 071e7d0..5176880 100644 --- a/src/Strata.SqlTools.SqlServer/Breakdowns/InsertBreakdown.cs +++ b/src/Strata.SqlTools.SqlServer/Breakdowns/InsertBreakdown.cs @@ -9,7 +9,6 @@ namespace Strata.SqlTools.Breakdowns.SqlServer; /// /// Represents an INSERT SQL statement breakdown with column and value clauses for SQL Server. /// -[Serializable] public class InsertBreakdown : SqlBreakdownBase { protected readonly StatementParser Parser; diff --git a/src/Strata.SqlTools.SqlServer/Breakdowns/ProcedureBreakdown.cs b/src/Strata.SqlTools.SqlServer/Breakdowns/ProcedureBreakdown.cs index cf697a4..d453de8 100644 --- a/src/Strata.SqlTools.SqlServer/Breakdowns/ProcedureBreakdown.cs +++ b/src/Strata.SqlTools.SqlServer/Breakdowns/ProcedureBreakdown.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Runtime.Serialization; using System.Text; using System.Text.RegularExpressions; using Strata.SqlTools.SqlBreakdown.Classes; @@ -10,7 +9,6 @@ namespace Strata.SqlTools.Breakdowns.SqlServer; /// /// Represents a SQL Server stored procedure call breakdown with procedure name and parameters. /// -[Serializable] public class ProcedureBreakdown : SqlBreakdownBase { protected readonly StatementParser Parser; @@ -46,20 +44,6 @@ public class ProcedureBreakdown : SqlBreakdownBase Parameters = parameters ?? new Dictionary(); } - /// - /// Re-establishes invariants after deserialization, since deserialization bypasses the - /// constructors that normally initialize the procedure name and parameter collection - /// (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) - { - RevalidateBreakdownState(); - ProcedureName ??= new SqlClause(); - Parameters ??= new Dictionary(); - } - /// /// Gets or sets the stored procedure name. /// diff --git a/src/Strata.SqlTools.SqlServer/Breakdowns/QueryBreakdown.cs b/src/Strata.SqlTools.SqlServer/Breakdowns/QueryBreakdown.cs index e817b91..7cb4b8d 100644 --- a/src/Strata.SqlTools.SqlServer/Breakdowns/QueryBreakdown.cs +++ b/src/Strata.SqlTools.SqlServer/Breakdowns/QueryBreakdown.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Runtime.Serialization; using System.Text; using Strata.SqlTools.SqlBreakdown.Classes; using Strata.SqlTools.SqlBreakdown.Expressions; @@ -14,7 +13,6 @@ namespace Strata.SqlTools.Breakdowns.SqlServer; /// /// Represents a SELECT query breakdown with all clauses (SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY). /// -[Serializable] #pragma warning disable S2325 // Methods and properties that don't access instance data should be static - False positive: These members access instance fields public class QueryBreakdown : SqlBreakdownBase, IQueryBreakdown { @@ -108,28 +106,6 @@ public class QueryBreakdown : SqlBreakdownBase, IQueryBreakdown } } - /// - /// Re-establishes invariants after deserialization, since deserialization bypasses the - /// constructors that normally initialize the parameter, WITH-clause, and clause backing - /// fields (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) - { - RevalidateBreakdownState(); - - _parameterList ??= new List(); - _withClauses ??= new List(); - _selectClause ??= new SqlExpressionClause(splitOnComma: true); - _fromClause ??= new SqlClause(); - _whereClause ??= new SqlExpressionClause(splitOnComma: false); - _groupByClause ??= new SqlExpressionClause(splitOnComma: true); - _havingClause ??= new SqlExpressionClause(splitOnComma: false); - _orderByClause ??= new SqlExpressionClause(splitOnComma: true); - _clausesCacheDirty = true; - } - #region Properties /// diff --git a/src/Strata.SqlTools.SqlServer/Breakdowns/QueryBreakdownCollection.cs b/src/Strata.SqlTools.SqlServer/Breakdowns/QueryBreakdownCollection.cs index 0594a9b..4fbf08c 100644 --- a/src/Strata.SqlTools.SqlServer/Breakdowns/QueryBreakdownCollection.cs +++ b/src/Strata.SqlTools.SqlServer/Breakdowns/QueryBreakdownCollection.cs @@ -1,4 +1,3 @@ -using System.Runtime.Serialization; using System.Text; using Strata.SqlTools.SqlBreakdown.Classes; using Strata.SqlTools.SqlBreakdown.Interfaces; @@ -12,7 +11,6 @@ namespace Strata.SqlTools.Breakdowns.SqlServer; /// This class extends SqlBreakdownCollection with SQL Server-specific functionality, /// including support for T-SQL features like batches (GO), temporary tables, stored procedures, and CTEs. /// -[Serializable] public class QueryBreakdownCollection : SqlBreakdownCollection { private readonly List _queryBreakdowns; @@ -34,20 +32,6 @@ public class QueryBreakdownCollection : SqlBreakdownCollection _queryBreakdowns = new List(queryBreakdowns ?? Enumerable.Empty()); } - /// - /// Validates that the backing list survived deserialization, since deserialization bypasses - /// the constructors that normally initialize it (SonarQube rule S5766). - /// - /// The streaming context for the deserialization operation. - [OnDeserialized] - private void OnDeserialized(StreamingContext context) - { - if (_queryBreakdowns is null) - { - throw new SerializationException("Deserialized QueryBreakdownCollection is missing its backing list."); - } - } - /// /// Gets the collection of QueryBreakdown objects. /// diff --git a/src/Strata.SqlTools.SqlServer/Breakdowns/UpdateBreakdown.cs b/src/Strata.SqlTools.SqlServer/Breakdowns/UpdateBreakdown.cs index f5ee6b6..b280f81 100644 --- a/src/Strata.SqlTools.SqlServer/Breakdowns/UpdateBreakdown.cs +++ b/src/Strata.SqlTools.SqlServer/Breakdowns/UpdateBreakdown.cs @@ -9,7 +9,6 @@ namespace Strata.SqlTools.Breakdowns.SqlServer; /// /// Represents an UPDATE SQL statement breakdown with SET, FROM, and WHERE clauses for SQL Server. /// -[Serializable] public class UpdateBreakdown : SqlBreakdownBase { protected readonly StatementParser Parser;