Skip to content

Commit dd0ba06

Browse files
committed
Merge remote-tracking branch 'origin/add-implicit-session-flag' into add-implicit-session-flag
2 parents ff61b60 + ad4f8c2 commit dd0ba06

File tree

10 files changed

+49
-11
lines changed

10 files changed

+49
-11
lines changed

.github/workflows/lint.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
- name: Restore
3232
run: dotnet restore ${{ matrix.source-dir }}${{ matrix.solutionFile }}
3333
- name: Install ReSharper
34-
run: dotnet tool install -g JetBrains.ReSharper.GlobalTools
34+
run: dotnet tool install -g JetBrains.ReSharper.GlobalTools --version 2025.2.1
3535
- name: format all files with auto-formatter
3636
run: bash ./.github/scripts/format-all-dotnet-code.sh ${{ matrix.source-dir }} ${{ matrix.solutionFile }}
3737
- name: Check repository diff
@@ -63,6 +63,7 @@ jobs:
6363
**.cshtml
6464
minimumReportSeverity: WARNING
6565
dotnetVersion: ${{ steps.setup-dotnet.outputs.dotnet-version }}
66+
version: 2025.2.1
6667
ignoreIssueType: |
6768
UnusedField.Compiler,
6869
UnusedVariable.Compiler,

src/Ydb.Sdk/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
- Added provider support for implicit sessions.
22

3+
## v0.23.1
4+
5+
- Fixed bug Topic Reader: NullReferenceException when handling StopPartitionSessionRequest ([#528](https://github.com/ydb-platform/ydb-dotnet-sdk/issues/528)).
6+
- Feat ADO.NET: Added YSON type support (YdbDbType.Yson) with byte[] values.
7+
38
## v0.23.0
49

510
- Feat ADO.NET: `YdbDataSource.OpenRetryableConnectionAsync` opens a retryable connection with automatic retries for transient failures.

src/Ydb.Sdk/src/Ado/Internal/YdbTypedValueExtensions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ internal static TypedValue Decimal(this decimal value, byte precision, byte scal
120120
internal static TypedValue Bytes(this byte[] value) => MakePrimitiveTypedValue(Type.Types.PrimitiveTypeId.String,
121121
new Ydb.Value { BytesValue = ByteString.CopyFrom(value) });
122122

123+
internal static TypedValue Yson(this byte[] value) => MakePrimitiveTypedValue(Type.Types.PrimitiveTypeId.Yson,
124+
new Ydb.Value { BytesValue = ByteString.CopyFrom(value) });
125+
123126
internal static TypedValue Json(this string value) => MakeText(Type.Types.PrimitiveTypeId.Json, value);
124127

125128
internal static TypedValue JsonDocument(this string value) =>

src/Ydb.Sdk/src/Ado/Internal/YdbValueExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ internal static TimeSpan GetInterval64(this Ydb.Value value) =>
5454

5555
internal static byte[] GetBytes(this Ydb.Value value) => value.BytesValue.ToByteArray();
5656

57+
internal static byte[] GetYson(this Ydb.Value value) => value.BytesValue.ToByteArray();
58+
5759
internal static string GetText(this Ydb.Value value) => value.TextValue;
5860

5961
internal static string GetJson(this Ydb.Value value) => value.TextValue;

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ public override byte GetByte(int ordinal) =>
9696

9797
public byte[] GetBytes(int ordinal) => GetPrimitiveValue(Type.Types.PrimitiveTypeId.String, ordinal).GetBytes();
9898

99+
public byte[] GetYson(int ordinal) => GetPrimitiveValue(Type.Types.PrimitiveTypeId.Yson, ordinal).GetYson();
100+
99101
public override long GetBytes(int ordinal, long dataOffset, byte[]? buffer, int bufferOffset, int length)
100102
{
101103
var bytes = GetBytes(ordinal);
@@ -281,6 +283,7 @@ or Type.Types.PrimitiveTypeId.Timestamp
281283
or Type.Types.PrimitiveTypeId.JsonDocument
282284
or Type.Types.PrimitiveTypeId.Json => typeof(string),
283285
Type.Types.PrimitiveTypeId.String => typeof(byte[]),
286+
Type.Types.PrimitiveTypeId.Yson => typeof(byte[]),
284287
Type.Types.PrimitiveTypeId.Uuid => typeof(Guid),
285288
_ => throw new YdbException($"Unsupported ydb type {type}")
286289
};
@@ -440,6 +443,7 @@ public override object GetValue(int ordinal)
440443
Type.Types.PrimitiveTypeId.Utf8 => ydbValue.GetText(),
441444
Type.Types.PrimitiveTypeId.Json => ydbValue.GetJson(),
442445
Type.Types.PrimitiveTypeId.JsonDocument => ydbValue.GetJsonDocument(),
446+
Type.Types.PrimitiveTypeId.Yson => ydbValue.GetYson(),
443447
Type.Types.PrimitiveTypeId.String => ydbValue.GetBytes(),
444448
Type.Types.PrimitiveTypeId.Uuid => ydbValue.GetUuid(),
445449
_ => throw new YdbException($"Unsupported ydb type {GetColumnType(ordinal)}")
@@ -707,7 +711,7 @@ private class Metadata : IMetadata
707711
public Metadata(ResultSet resultSet)
708712
{
709713
Columns = resultSet.Columns;
710-
ColumnNameToOrdinal = ColumnNameToOrdinal = Columns
714+
ColumnNameToOrdinal = Columns
711715
.Select((c, idx) => (c.Name, Index: idx))
712716
.ToDictionary(t => t.Name, t => t.Index);
713717
RowsCount = resultSet.Rows.Count;

src/Ydb.Sdk/src/Ado/YdbParameter.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public sealed class YdbParameter : DbParameter
3333
{ YdbDbType.Float, Type.Types.PrimitiveTypeId.Float.Null() },
3434
{ YdbDbType.Double, Type.Types.PrimitiveTypeId.Double.Null() },
3535
{ YdbDbType.Uuid, Type.Types.PrimitiveTypeId.Uuid.Null() },
36+
{ YdbDbType.Yson, Type.Types.PrimitiveTypeId.Yson.Null() },
3637
{ YdbDbType.Json, Type.Types.PrimitiveTypeId.Json.Null() },
3738
{ YdbDbType.JsonDocument, Type.Types.PrimitiveTypeId.JsonDocument.Null() },
3839
{ YdbDbType.Date32, Type.Types.PrimitiveTypeId.Date32.Null() },
@@ -155,6 +156,7 @@ internal TypedValue TypedValue
155156
YdbDbType.Double => MakeDouble(value),
156157
YdbDbType.Decimal when value is decimal decimalValue => Decimal(decimalValue),
157158
YdbDbType.Bytes => MakeBytes(value),
159+
YdbDbType.Yson => MakeYson(value),
158160
YdbDbType.Json when value is string stringValue => stringValue.Json(),
159161
YdbDbType.JsonDocument when value is string stringValue => stringValue.JsonDocument(),
160162
YdbDbType.Uuid when value is Guid guidValue => guidValue.Uuid(),
@@ -240,6 +242,13 @@ internal TypedValue TypedValue
240242
_ => throw ValueTypeNotSupportedException
241243
};
242244

245+
private TypedValue MakeYson(object value) => value switch
246+
{
247+
byte[] bytesValue => bytesValue.Yson(),
248+
MemoryStream memoryStream => memoryStream.ToArray().Yson(),
249+
_ => throw ValueTypeNotSupportedException
250+
};
251+
243252
private TypedValue MakeDate(object value) => value switch
244253
{
245254
DateTime dateTimeValue => dateTimeValue.Date(),

src/Ydb.Sdk/src/Ado/YdbType/YdbDbType.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,14 @@ public enum YdbDbType
105105
/// </remarks>
106106
Text,
107107

108+
/// <summary>
109+
/// YSON in binary form (passed/returned as byte[]).
110+
/// </summary>
111+
/// <remarks>
112+
/// Can't be used in the primary key.
113+
/// </remarks>
114+
Yson,
115+
108116
/// <summary>
109117
/// JSON represented as text.
110118
/// </summary>

src/Ydb.Sdk/src/Services/Topic/Reader/Reader.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -322,11 +322,11 @@ private async Task RunProcessingStreamResponse()
322322
case ServerMessageOneofCase.CommitOffsetResponse:
323323
HandleCommitOffsetResponse(messageFromServer.CommitOffsetResponse);
324324
break;
325-
case ServerMessageOneofCase.PartitionSessionStatusResponse:
326-
case ServerMessageOneofCase.UpdateTokenResponse:
327325
case ServerMessageOneofCase.StopPartitionSessionRequest:
328326
await StopPartitionSessionRequest(messageFromServer.StopPartitionSessionRequest);
329327
break;
328+
case ServerMessageOneofCase.PartitionSessionStatusResponse:
329+
case ServerMessageOneofCase.UpdateTokenResponse:
330330
case ServerMessageOneofCase.InitResponse:
331331
case ServerMessageOneofCase.None:
332332
case ServerMessageOneofCase.UpdatePartitionSession:

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Tests/YdbParameterTests.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,7 @@ CustomDecimalColumn Decimal(35, 5) NOT NULL,
343343
IntervalColumn Interval NOT NULL,
344344
JsonColumn Json NOT NULL,
345345
JsonDocumentColumn JsonDocument NOT NULL,
346+
YsonColumn Yson NOT NULL,
346347
Date32Column Date32 NOT NULL,
347348
Datetime64Column DateTime64 NOT NULL,
348349
Timestamp64Column Timestamp64 NOT NULL,
@@ -359,13 +360,13 @@ PRIMARY KEY (Int32Column)
359360
Int32Column, BoolColumn, Int64Column, Int16Column, Int8Column, FloatColumn, DoubleColumn,
360361
DefaultDecimalColumn, CustomDecimalColumn, Uint8Column, Uint16Column, Uint32Column,
361362
Uint64Column, TextColumn, BytesColumn, DateColumn, DatetimeColumn, TimestampColumn,
362-
IntervalColumn, JsonColumn, JsonDocumentColumn, Date32Column, Datetime64Column,
363+
IntervalColumn, JsonColumn, JsonDocumentColumn, YsonColumn, Date32Column, Datetime64Column,
363364
Timestamp64Column, Interval64Column
364365
) VALUES (
365366
@Int32Column, @BoolColumn, @Int64Column, @Int16Column, @Int8Column, @FloatColumn,
366367
@DoubleColumn, @DefaultDecimalColumn, @CustomDecimalColumn, @Uint8Column, @Uint16Column,
367368
@Uint32Column, @Uint64Column, @TextColumn, @BytesColumn, @DateColumn, @DatetimeColumn,
368-
@TimestampColumn, @IntervalColumn, @JsonColumn, @JsonDocumentColumn, @Date32Column,
369+
@TimestampColumn, @IntervalColumn, @JsonColumn, @JsonDocumentColumn, @YsonColumn, @Date32Column,
369370
@Datetime64Column, @Timestamp64Column, @Interval64Column
370371
);
371372
""",
@@ -392,6 +393,7 @@ PRIMARY KEY (Int32Column)
392393
new YdbParameter("IntervalColumn", YdbDbType.Interval, TimeSpan.Zero),
393394
new YdbParameter("JsonColumn", YdbDbType.Json, "{}"),
394395
new YdbParameter("JsonDocumentColumn", YdbDbType.JsonDocument, "{}"),
396+
new YdbParameter("YsonColumn", YdbDbType.Yson, "{a=1u}"u8.ToArray()),
395397
new YdbParameter("Date32Column", YdbDbType.Date32, DateTime.MinValue),
396398
new YdbParameter("Datetime64Column", YdbDbType.Datetime64, DateTime.MinValue),
397399
new YdbParameter("Timestamp64Column", YdbDbType.Timestamp64, DateTime.MinValue),
@@ -407,7 +409,7 @@ PRIMARY KEY (Int32Column)
407409
Int32Column, BoolColumn, Int64Column, Int16Column, Int8Column, FloatColumn, DoubleColumn,
408410
DefaultDecimalColumn, CustomDecimalColumn, Uint8Column, Uint16Column, Uint32Column,
409411
Uint64Column, TextColumn, BytesColumn, DateColumn, DatetimeColumn, TimestampColumn,
410-
IntervalColumn, JsonColumn, JsonDocumentColumn, Date32Column, Datetime64Column,
412+
IntervalColumn, JsonColumn, JsonDocumentColumn, YsonColumn, Date32Column, Datetime64Column,
411413
Timestamp64Column, Interval64Column
412414
FROM {tableName};
413415
"""
@@ -435,10 +437,11 @@ PRIMARY KEY (Int32Column)
435437
Assert.Equal(TimeSpan.Zero, ydbDataReader.GetInterval(18));
436438
Assert.Equal("{}", ydbDataReader.GetJson(19));
437439
Assert.Equal("{}", ydbDataReader.GetJsonDocument(20));
438-
Assert.Equal(DateTime.MinValue, ydbDataReader.GetDateTime(21));
440+
Assert.Equal("{a=1u}"u8.ToArray(), ydbDataReader.GetYson(21));
439441
Assert.Equal(DateTime.MinValue, ydbDataReader.GetDateTime(22));
440442
Assert.Equal(DateTime.MinValue, ydbDataReader.GetDateTime(23));
441-
Assert.Equal(TimeSpan.FromMilliseconds(TimeSpan.MinValue.Milliseconds), ydbDataReader.GetInterval(24));
443+
Assert.Equal(DateTime.MinValue, ydbDataReader.GetDateTime(24));
444+
Assert.Equal(TimeSpan.FromMilliseconds(TimeSpan.MinValue.Milliseconds), ydbDataReader.GetInterval(25));
442445
Assert.False(ydbDataReader.Read());
443446
await ydbDataReader.CloseAsync();
444447

src/Ydb.Sdk/test/Ydb.Sdk.Ado.Tests/YdbSchemaTests.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,8 @@ public async Task GetSchema_WhenAllTypesTable_ReturnAllTypes()
176176
var dataTable = await ydbConnection.GetSchemaAsync("Columns", [_allTypesTable, null]);
177177
var dataTableNullable = await ydbConnection.GetSchemaAsync("Columns", [_allTypesTableNullable, null]);
178178

179-
Assert.Equal(17, dataTable.Rows.Count);
180-
Assert.Equal(17, dataTableNullable.Rows.Count);
179+
Assert.Equal(18, dataTable.Rows.Count);
180+
Assert.Equal(18, dataTableNullable.Rows.Count);
181181

182182
CheckAllColumns(dataTable, false);
183183
CheckAllColumns(dataTableNullable, true);
@@ -202,6 +202,7 @@ void CheckAllColumns(DataTable pDataTable, bool isNullableTable)
202202
CheckColumn(pDataTable.Rows[14], "DateColumn", 14, isNullableTable);
203203
CheckColumn(pDataTable.Rows[15], "DatetimeColumn", 15, isNullableTable);
204204
CheckColumn(pDataTable.Rows[16], "TimestampColumn", 16, isNullableTable);
205+
CheckColumn(pDataTable.Rows[17], "YsonColumn", 17, isNullableTable, "Yson");
205206
}
206207

207208
void CheckColumn(DataRow column, string columnName, int ordinal, bool isNullable, string? dataType = null)
@@ -243,6 +244,7 @@ DefaultDecimalColumn Decimal(22,9) NOT NULL,
243244
DateColumn Date NOT NULL,
244245
DatetimeColumn Datetime NOT NULL,
245246
TimestampColumn Timestamp NOT NULL,
247+
YsonColumn Yson NOT NULL,
246248
PRIMARY KEY (Int32Column)
247249
);
248250
@@ -264,6 +266,7 @@ DefaultDecimalColumn Decimal(22,9),
264266
DateColumn Date,
265267
DatetimeColumn Datetime,
266268
TimestampColumn Timestamp,
269+
YsonColumn Yson,
267270
PRIMARY KEY (Int32Column)
268271
);
269272
"""

0 commit comments

Comments
 (0)