Skip to content

Commit 16ed2fb

Browse files
bug: fixed extract json / yson types (#196)
* bug: fixed extract json / yson types * commit
1 parent 62d73a4 commit 16ed2fb

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
- Fixed YdbDataReader: extract Json / Yson types
2+
13
## v0.7.2
24
- Fixed YdbDataReader: `GetValue()` returns `DbNull.Value` if field is null
35
- YdbOperationInProgressException extends YdbException

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: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Text;
33
using Xunit;
44
using Ydb.Sdk.Ado;
5+
using Ydb.Sdk.Value;
56

67
namespace Ydb.Sdk.Tests.Ado;
78

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

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

0 commit comments

Comments
 (0)