Skip to content

Commit bf91c5c

Browse files
bug: fixed extract json / yson types
1 parent 62d73a4 commit bf91c5c

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

src/Ydb.Sdk/src/Ado/YdbDataReader.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,10 @@ public override object GetValue(int ordinal)
333333
YdbTypeId.Float => ydbValue.GetFloat(),
334334
YdbTypeId.Double => ydbValue.GetDouble(),
335335
YdbTypeId.Interval => ydbValue.GetInterval(),
336-
YdbTypeId.Utf8 or YdbTypeId.JsonDocument or YdbTypeId.Json or YdbTypeId.Yson => GetString(ordinal),
336+
YdbTypeId.Utf8 => ydbValue.GetUtf8(),
337+
YdbTypeId.Json => ydbValue.GetJson(),
338+
YdbTypeId.JsonDocument => ydbValue.GetJsonDocument(),
339+
YdbTypeId.Yson => ydbValue.GetYson(),
337340
YdbTypeId.String => ydbValue.GetString(),
338341
YdbTypeId.DecimalType => ydbValue.GetDecimal(),
339342
_ => throw new YdbException($"Unsupported ydb type {ydbValue.TypeId}")

src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using System.Data;
22
using System.Text;
3+
using Dapper;
34
using Xunit;
45
using Ydb.Sdk.Ado;
6+
using Ydb.Sdk.Value;
57

68
namespace Ydb.Sdk.Tests.Ado;
79

@@ -67,6 +69,42 @@ public async Task ExecuteScalarAsync_WhenSetYdbParameterThenPrepare_ReturnThisVa
6769
Assert.Equal(data.Expected, await dbCommand.ExecuteScalarAsync());
6870
}
6971

72+
[Fact]
73+
public async Task ExecuteScalarAsync_WhenNoDbTypeParameter_ReturnThisValue()
74+
{
75+
const string simpleJson = @"{""a"":""b""}";
76+
77+
var args = new List<(YdbValue YdbValue, object Expected)>
78+
{
79+
(YdbValue.MakeJson(simpleJson), simpleJson),
80+
(YdbValue.MakeJsonDocument(simpleJson), simpleJson),
81+
(YdbValue.MakeInterval(TimeSpan.FromSeconds(5)), TimeSpan.FromSeconds(5)),
82+
(YdbValue.MakeYson(Encoding.ASCII.GetBytes("{type=\"yson\"}")), Encoding.ASCII.GetBytes("{type=\"yson\"}")),
83+
(YdbValue.MakeOptionalJson(simpleJson), simpleJson),
84+
(YdbValue.MakeOptionalJsonDocument(simpleJson), simpleJson),
85+
(YdbValue.MakeOptionalInterval(TimeSpan.FromSeconds(5)), TimeSpan.FromSeconds(5)),
86+
(YdbValue.MakeOptionalYson(Encoding.ASCII.GetBytes("{type=\"yson\"}")),
87+
Encoding.ASCII.GetBytes("{type=\"yson\"}"))
88+
};
89+
90+
await using var connection = new YdbConnection();
91+
await connection.OpenAsync();
92+
93+
var dbCommand = connection.CreateCommand();
94+
dbCommand.CommandText = "SELECT @var;";
95+
96+
foreach (var arg in args)
97+
{
98+
dbCommand.Parameters.Clear();
99+
dbCommand.Parameters.Add(new YdbParameter
100+
{
101+
ParameterName = "@var",
102+
Value = arg.YdbValue
103+
});
104+
Assert.Equal(arg.Expected, await dbCommand.ExecuteScalarAsync());
105+
}
106+
}
107+
70108
[Fact]
71109
public async Task ExecuteNonQueryAsync_WhenCreateUser_ReturnEmptyResultSet()
72110
{

0 commit comments

Comments
 (0)