Skip to content

Commit

Permalink
Fix SqlDataReader.IsDBNull() for json (dotnet#2830)
Browse files Browse the repository at this point in the history
* fix SqlDataReader.IsDBNull() for json

* add testcase

* resolve PR commits
  • Loading branch information
deepaksa1 committed Oct 1, 2024
1 parent cc58d79 commit a67c701
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5820,6 +5820,10 @@ internal static object GetNullSqlValue(SqlBuffer nullVal, SqlMetaDataPriv md, Sq
}
break;

case SqlDbTypeExtensions.Json:
nullVal.SetToNullOfType(SqlBuffer.StorageType.Json);
break;

default:
Debug.Fail("unknown null sqlType!" + md.type.ToString());
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6667,6 +6667,10 @@ internal static object GetNullSqlValue(
}
break;

case SqlDbTypeExtensions.Json:
nullVal.SetToNullOfType(SqlBuffer.StorageType.Json);
break;

default:
Debug.Fail("unknown null sqlType!" + md.type.ToString());
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,16 @@ private void ValidateSchema(SqlDataReader reader)
}
}

private void ValidateNullJson(SqlDataReader reader)
{
while (reader.Read())
{
bool IsNull = reader.IsDBNull(0);
_output.WriteLine(IsNull ? "null" : "not null");
Assert.True(IsNull);
}
}

[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsJsonSupported))]
public void TestJsonWrite()
{
Expand Down Expand Up @@ -295,5 +305,38 @@ public async Task TestJsonReadAsync()
}
}
}

[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsJsonSupported))]
public void TestNullJson()
{
string tableName = DataTestUtility.GetUniqueNameForSqlServer("Json_Test");

string tableCreate = "CREATE TABLE " + tableName + " (Data json)";
string tableInsert = "INSERT INTO " + tableName + " VALUES (@jsonData)";
string tableRead = "SELECT * FROM " + tableName;

using SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString);
connection.Open();
using SqlCommand command = connection.CreateCommand();

//Create Table
command.CommandText = tableCreate;
command.ExecuteNonQuery();

//Insert Null value
command.CommandText = tableInsert;
var parameter = new SqlParameter("@jsonData", SqlDbTypeExtensions.Json);
parameter.Value = DBNull.Value;
command.Parameters.Add(parameter);
command.ExecuteNonQuery();

//Query the table
command.CommandText = tableRead;
var reader = command.ExecuteReader();
ValidateNullJson(reader);

reader.Close();
DataTestUtility.DropTable(connection, tableName);
}
}
}

0 comments on commit a67c701

Please sign in to comment.