Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
- Fixed YdbDataReader: extract Json / Yson types

## v0.7.2
- Fixed YdbDataReader: `GetValue()` returns `DbNull.Value` if field is null
- YdbOperationInProgressException extends YdbException
Expand Down
5 changes: 4 additions & 1 deletion src/Ydb.Sdk/src/Ado/YdbDataReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,10 @@ public override object GetValue(int ordinal)
YdbTypeId.Float => ydbValue.GetFloat(),
YdbTypeId.Double => ydbValue.GetDouble(),
YdbTypeId.Interval => ydbValue.GetInterval(),
YdbTypeId.Utf8 or YdbTypeId.JsonDocument or YdbTypeId.Json or YdbTypeId.Yson => GetString(ordinal),
YdbTypeId.Utf8 => ydbValue.GetUtf8(),
YdbTypeId.Json => ydbValue.GetJson(),
YdbTypeId.JsonDocument => ydbValue.GetJsonDocument(),
YdbTypeId.Yson => ydbValue.GetYson(),
YdbTypeId.String => ydbValue.GetString(),
YdbTypeId.DecimalType => ydbValue.GetDecimal(),
_ => throw new YdbException($"Unsupported ydb type {ydbValue.TypeId}")
Expand Down
37 changes: 37 additions & 0 deletions src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Text;
using Xunit;
using Ydb.Sdk.Ado;
using Ydb.Sdk.Value;

namespace Ydb.Sdk.Tests.Ado;

Expand Down Expand Up @@ -67,6 +68,42 @@ public async Task ExecuteScalarAsync_WhenSetYdbParameterThenPrepare_ReturnThisVa
Assert.Equal(data.Expected, await dbCommand.ExecuteScalarAsync());
}

[Fact]
public async Task ExecuteScalarAsync_WhenNoDbTypeParameter_ReturnThisValue()
{
const string simpleJson = @"{""a"":""b""}";

var args = new List<(YdbValue YdbValue, object Expected)>
{
(YdbValue.MakeJson(simpleJson), simpleJson),
(YdbValue.MakeJsonDocument(simpleJson), simpleJson),
(YdbValue.MakeInterval(TimeSpan.FromSeconds(5)), TimeSpan.FromSeconds(5)),
(YdbValue.MakeYson(Encoding.ASCII.GetBytes("{type=\"yson\"}")), Encoding.ASCII.GetBytes("{type=\"yson\"}")),
(YdbValue.MakeOptionalJson(simpleJson), simpleJson),
(YdbValue.MakeOptionalJsonDocument(simpleJson), simpleJson),
(YdbValue.MakeOptionalInterval(TimeSpan.FromSeconds(5)), TimeSpan.FromSeconds(5)),
(YdbValue.MakeOptionalYson(Encoding.ASCII.GetBytes("{type=\"yson\"}")),
Encoding.ASCII.GetBytes("{type=\"yson\"}"))
};

await using var connection = new YdbConnection();
await connection.OpenAsync();

var dbCommand = connection.CreateCommand();
dbCommand.CommandText = "SELECT @var;";

foreach (var arg in args)
{
dbCommand.Parameters.Clear();
dbCommand.Parameters.Add(new YdbParameter
{
ParameterName = "@var",
Value = arg.YdbValue
});
Assert.Equal(arg.Expected, await dbCommand.ExecuteScalarAsync());
}
}

[Fact]
public async Task ExecuteNonQueryAsync_WhenCreateUser_ReturnEmptyResultSet()
{
Expand Down
Loading