From 2a3e1d591378f7938475acc8a171a5e26c734e8c Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Wed, 4 Mar 2020 14:52:53 +0100 Subject: [PATCH] Empty string init and coalescing for various properties Closes #20171 --- .../SqliteCommand.cs | 2 +- .../SqliteConnection.cs | 6 +-- .../SqliteParameter.cs | 14 ++++++- .../SqliteCommandTest.cs | 11 ++++++ .../SqliteConnectionStringBuilderTest.cs | 19 ++++++++++ .../SqliteConnectionTest.cs | 19 ++++++++++ .../SqliteParameterTest.cs | 38 +++++++++++++++++++ 7 files changed, 103 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.Data.Sqlite.Core/SqliteCommand.cs b/src/Microsoft.Data.Sqlite.Core/SqliteCommand.cs index 34368f2f145..8a3e3a041c6 100644 --- a/src/Microsoft.Data.Sqlite.Core/SqliteCommand.cs +++ b/src/Microsoft.Data.Sqlite.Core/SqliteCommand.cs @@ -102,7 +102,7 @@ public override string CommandText if (value != _commandText) { DisposePreparedStatements(); - _commandText = value; + _commandText = value ?? string.Empty; } } } diff --git a/src/Microsoft.Data.Sqlite.Core/SqliteConnection.cs b/src/Microsoft.Data.Sqlite.Core/SqliteConnection.cs index 206dfe218bb..410f39dfdc1 100644 --- a/src/Microsoft.Data.Sqlite.Core/SqliteConnection.cs +++ b/src/Microsoft.Data.Sqlite.Core/SqliteConnection.cs @@ -36,7 +36,7 @@ public partial class SqliteConnection : DbConnection private HashSet<(string file, string proc)> _extensions; - private string _connectionString; + private string _connectionString = string.Empty; private ConnectionState _state; private sqlite3 _db; private bool _extensionsEnabled; @@ -84,7 +84,7 @@ public override string ConnectionString throw new InvalidOperationException(Resources.ConnectionStringRequiresClosedConnection); } - _connectionString = value; + _connectionString = value ?? string.Empty; ConnectionOptions = new SqliteConnectionStringBuilder(value); } } @@ -164,7 +164,7 @@ public override void Open() return; } - if (ConnectionString == null) + if (string.IsNullOrEmpty(ConnectionString)) { throw new InvalidOperationException(Resources.OpenRequiresSetConnectionString); } diff --git a/src/Microsoft.Data.Sqlite.Core/SqliteParameter.cs b/src/Microsoft.Data.Sqlite.Core/SqliteParameter.cs index 3f0ef48ab39..9837dfef4ad 100644 --- a/src/Microsoft.Data.Sqlite.Core/SqliteParameter.cs +++ b/src/Microsoft.Data.Sqlite.Core/SqliteParameter.cs @@ -18,9 +18,11 @@ namespace Microsoft.Data.Sqlite /// Data Types public class SqliteParameter : DbParameter { + private string _parameterName = string.Empty; private object _value; private int? _size; private SqliteType? _sqliteType; + private string _sourceColumn = string.Empty; /// /// Initializes a new instance of the class. @@ -122,7 +124,11 @@ public override ParameterDirection Direction /// Gets or sets the name of the parameter. /// /// The name of the parameter. - public override string ParameterName { get; set; } = string.Empty; + public override string ParameterName + { + get => _parameterName; + set => _parameterName = value ?? String.Empty; + } /// /// Gets or sets the maximum size, in bytes, of the parameter. @@ -154,7 +160,11 @@ public override int Size /// Gets or sets the source column used for loading the value. /// /// The source column used for loading the value. - public override string SourceColumn { get; set; } = string.Empty; + public override string SourceColumn + { + get => _sourceColumn; + set => _sourceColumn = value ?? string.Empty; + } /// /// Gets or sets a value indicating whether the source column is nullable. diff --git a/test/Microsoft.Data.Sqlite.Tests/SqliteCommandTest.cs b/test/Microsoft.Data.Sqlite.Tests/SqliteCommandTest.cs index f1ada438734..8daec2a1619 100644 --- a/test/Microsoft.Data.Sqlite.Tests/SqliteCommandTest.cs +++ b/test/Microsoft.Data.Sqlite.Tests/SqliteCommandTest.cs @@ -43,6 +43,17 @@ public void CommandText_defaults_to_empty() Assert.Empty(command.CommandText); } + [Fact] + public void CommandText_coalesces_to_empty() + { + var command = new SqliteCommand + { + CommandText = null + }; + + Assert.Empty(command.CommandText); + } + [Fact] public void CommandText_throws_when_set_when_open_reader() { diff --git a/test/Microsoft.Data.Sqlite.Tests/SqliteConnectionStringBuilderTest.cs b/test/Microsoft.Data.Sqlite.Tests/SqliteConnectionStringBuilderTest.cs index cad9b0b6e84..b52bfbb4bdd 100644 --- a/test/Microsoft.Data.Sqlite.Tests/SqliteConnectionStringBuilderTest.cs +++ b/test/Microsoft.Data.Sqlite.Tests/SqliteConnectionStringBuilderTest.cs @@ -33,6 +33,25 @@ public void Ctor_parses_mode() Assert.Equal(SqliteOpenMode.Memory, builder.Mode); } + [Fact] + public void ConnectionString_defaults_to_empty() + { + var builder = new SqliteConnectionStringBuilder(); + + Assert.Empty(builder.ConnectionString); + } + + [Fact] + public void ConnectionString_coalesces_to_empty() + { + var builder = new SqliteConnectionStringBuilder + { + ConnectionString = null + }; + + Assert.Empty(builder.ConnectionString); + } + [Fact] public void Filename_is_alias_for_DataSource() { diff --git a/test/Microsoft.Data.Sqlite.Tests/SqliteConnectionTest.cs b/test/Microsoft.Data.Sqlite.Tests/SqliteConnectionTest.cs index 6b52947b996..9785e440f04 100644 --- a/test/Microsoft.Data.Sqlite.Tests/SqliteConnectionTest.cs +++ b/test/Microsoft.Data.Sqlite.Tests/SqliteConnectionTest.cs @@ -27,6 +27,25 @@ public void Ctor_sets_connection_string() Assert.Equal(connectionString, connection.ConnectionString); } + [Fact] + public void ConnectionString_defaults_to_empty() + { + var connection = new SqliteConnection(); + + Assert.Empty(connection.ConnectionString); + } + + [Fact] + public void ConnectionString_coalesces_to_empty() + { + var connection = new SqliteConnection + { + ConnectionString = null + }; + + Assert.Empty(connection.ConnectionString); + } + [Fact] public void ConnectionString_setter_throws_when_open() { diff --git a/test/Microsoft.Data.Sqlite.Tests/SqliteParameterTest.cs b/test/Microsoft.Data.Sqlite.Tests/SqliteParameterTest.cs index 9ddca04ec3f..7faa2b540fb 100644 --- a/test/Microsoft.Data.Sqlite.Tests/SqliteParameterTest.cs +++ b/test/Microsoft.Data.Sqlite.Tests/SqliteParameterTest.cs @@ -32,6 +32,44 @@ public void Ctor_sets_other_values() Assert.Equal("Column", result.SourceColumn); } + [Fact] + public void ParameterName_defaults_to_empty() + { + var parameter = new SqliteParameter(); + + Assert.Empty(parameter.ParameterName); + } + + [Fact] + public void ParameterName_coalesces_to_empty() + { + var parameter = new SqliteParameter + { + ParameterName = null + }; + + Assert.Empty(parameter.ParameterName); + } + + [Fact] + public void SourceColumn_defaults_to_empty() + { + var parameter = new SqliteParameter(); + + Assert.Empty(parameter.SourceColumn); + } + + [Fact] + public void SourceColumn_coalesces_to_empty() + { + var parameter = new SqliteParameter + { + SourceColumn = null + }; + + Assert.Empty(parameter.SourceColumn); + } + [Fact] public void DbType_defaults_to_string() {