Skip to content

Commit

Permalink
Fix SqlDataReader.IsDBNull() for json (#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 authored Sep 4, 2024
1 parent b8a03e5 commit f5994c8
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 @@ -5825,6 +5825,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 @@ -6670,6 +6670,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 @@ -61,6 +61,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 @@ -286,5 +296,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 f5994c8

Please sign in to comment.