From bf91c5c87cdf88cf25ad490bdca43a84b7f4be3f Mon Sep 17 00:00:00 2001 From: KirillKurdyukov Date: Wed, 9 Oct 2024 12:24:26 +0300 Subject: [PATCH 1/2] bug: fixed extract json / yson types --- src/Ydb.Sdk/src/Ado/YdbDataReader.cs | 5 +++- src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs | 38 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/Ydb.Sdk/src/Ado/YdbDataReader.cs b/src/Ydb.Sdk/src/Ado/YdbDataReader.cs index b7a963e6..c132cb9d 100644 --- a/src/Ydb.Sdk/src/Ado/YdbDataReader.cs +++ b/src/Ydb.Sdk/src/Ado/YdbDataReader.cs @@ -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}") diff --git a/src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs b/src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs index 6cd22f4a..8f0d111f 100644 --- a/src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs +++ b/src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs @@ -1,7 +1,9 @@ using System.Data; using System.Text; +using Dapper; using Xunit; using Ydb.Sdk.Ado; +using Ydb.Sdk.Value; namespace Ydb.Sdk.Tests.Ado; @@ -67,6 +69,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() { From afb5b5811af22338e8c45c3101966b05fdb2d894 Mon Sep 17 00:00:00 2001 From: KirillKurdyukov Date: Wed, 9 Oct 2024 12:28:59 +0300 Subject: [PATCH 2/2] commit --- CHANGELOG.md | 2 ++ src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4fd45508..1bcf955e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs b/src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs index 8f0d111f..951d9440 100644 --- a/src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs +++ b/src/Ydb.Sdk/tests/Ado/YdbCommandTests.cs @@ -1,6 +1,5 @@ using System.Data; using System.Text; -using Dapper; using Xunit; using Ydb.Sdk.Ado; using Ydb.Sdk.Value;