Skip to content

Commit fd83798

Browse files
Add test
1 parent 5209fae commit fd83798

File tree

2 files changed

+124
-2
lines changed

2 files changed

+124
-2
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ internal interface ISqlParam
1313

1414
internal record PrimitiveParam(string Name, bool IsNative) : ISqlParam
1515
{
16-
public TypedValue YdbValueFetch(Dictionary<string, TypedValue> ydbParameters) => ydbParameters[Name];
16+
public TypedValue YdbValueFetch(Dictionary<string, TypedValue> ydbParameters) => ydbParameters.Get(Name);
1717
}
1818

1919
internal class ListPrimitiveParam : ISqlParam

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

Lines changed: 123 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Globalization;
33
using Xunit;
44
using Ydb.Sdk.Ado.YdbType;
5+
using Ydb.Sdk.Value;
56

67
namespace Ydb.Sdk.Ado.Tests;
78

@@ -25,6 +26,11 @@ public void YdbParameter_WhenSetWithoutAnyFormat_ReturnCorrectName()
2526
Assert.Equal("$name", new YdbParameter { ParameterName = "$name" }.ParameterName);
2627
}
2728

29+
[Fact]
30+
public void YdbValue_WhenYdbValueIsSet_ReturnThis() =>
31+
Assert.Equal("{\"type\": \"jsondoc\"}", new YdbParameter("$parameter",
32+
YdbValue.MakeJsonDocument("{\"type\": \"jsondoc\"}")).TypedValue.Value.TextValue);
33+
2834
[Fact]
2935
public void YdbParameter_WhenUnCastTypes_ThrowInvalidCastException()
3036
{
@@ -228,7 +234,7 @@ public async Task YdbParameter_WhenYdbDbTypeSetAndValueIsNull_ReturnsNullValue()
228234
{
229235
if (ydbType == YdbDbType.Unspecified) continue;
230236

231-
var tableName = $"YdbDbType_{Random.Shared.Next()}";
237+
var tableName = $"Null_YdbDbType_{Random.Shared.Next()}";
232238
await using var ydbConnection = await CreateOpenConnectionAsync();
233239
var ydbTypeStr = ydbType == YdbDbType.Decimal ? "Decimal(22, 9)" : ydbType.ToString();
234240
await new YdbCommand(ydbConnection)
@@ -250,4 +256,120 @@ public async Task YdbParameter_WhenYdbDbTypeSetAndValueIsNull_ReturnsNullValue()
250256
await new YdbCommand(ydbConnection) { CommandText = $"DROP TABLE {tableName};" }.ExecuteNonQueryAsync();
251257
}
252258
}
259+
260+
[Fact]
261+
public async Task YdbParameter_WhenYdbDbTypeSetAndValueIsNotNull_ReturnsValue()
262+
{
263+
await using var ydbConnection = await CreateOpenConnectionAsync();
264+
var tableName = $"NouNull_YdbDbType_{Random.Shared.Next()}";
265+
await new YdbCommand(ydbConnection)
266+
{
267+
CommandText = $"""
268+
CREATE TABLE {tableName} (
269+
Int32Column Int32,
270+
BoolColumn Bool NOT NULL,
271+
Int64Column Int64 NOT NULL,
272+
Int16Column Int16 NOT NULL,
273+
Int8Column Int8 NOT NULL,
274+
FloatColumn Float NOT NULL,
275+
DoubleColumn Double NOT NULL,
276+
DefaultDecimalColumn Decimal(22, 9) NOT NULL,
277+
CustomDecimalColumn Decimal(35, 5) NOT NULL,
278+
Uint8Column Uint8 NOT NULL,
279+
Uint16Column Uint16 NOT NULL,
280+
Uint32Column Uint32 NOT NULL,
281+
Uint64Column Uint64 NOT NULL,
282+
TextColumn Text NOT NULL,
283+
BytesColumn Bytes NOT NULL,
284+
DateColumn Date NOT NULL,
285+
DatetimeColumn Datetime NOT NULL,
286+
TimestampColumn Timestamp NOT NULL,
287+
IntervalColumn Interval NOT NULL,
288+
JsonColumn Json NOT NULL,
289+
JsonDocumentColumn JsonDocument NOT NULL,
290+
PRIMARY KEY (Int32Column)
291+
);
292+
"""
293+
}.ExecuteNonQueryAsync();
294+
295+
await new YdbCommand(ydbConnection)
296+
{
297+
CommandText = $"""
298+
INSERT INTO {tableName} (
299+
Int32Column, BoolColumn, Int64Column, Int16Column, Int8Column, FloatColumn, DoubleColumn,
300+
DefaultDecimalColumn, CustomDecimalColumn, Uint8Column, Uint16Column, Uint32Column,
301+
Uint64Column, TextColumn, BytesColumn, DateColumn, DatetimeColumn, TimestampColumn,
302+
IntervalColumn, JsonColumn, JsonDocumentColumn
303+
) VALUES (
304+
@Int32Column, @BoolColumn, @Int64Column, @Int16Column, @Int8Column, @FloatColumn,
305+
@DoubleColumn, @DefaultDecimalColumn, @CustomDecimalColumn, @Uint8Column, @Uint16Column,
306+
@Uint32Column, @Uint64Column, @TextColumn, @BytesColumn, @DateColumn, @DatetimeColumn,
307+
@TimestampColumn, @IntervalColumn, @JsonColumn, @JsonDocumentColumn
308+
);
309+
""",
310+
Parameters =
311+
{
312+
new YdbParameter("Int32Column", YdbDbType.Int32, 1),
313+
new YdbParameter("BoolColumn", YdbDbType.Bool, true),
314+
new YdbParameter("Int64Column", YdbDbType.Int64, 1),
315+
new YdbParameter("Int16Column", YdbDbType.Int16, (short)1),
316+
new YdbParameter("Int8Column", YdbDbType.Int8, (sbyte)1),
317+
new YdbParameter("FloatColumn", YdbDbType.Float, 1.0f),
318+
new YdbParameter("DoubleColumn", YdbDbType.Double, 1.0),
319+
new YdbParameter("DefaultDecimalColumn", YdbDbType.Decimal, 1m),
320+
new YdbParameter("CustomDecimalColumn", YdbDbType.Decimal, 1m) { Precision = 35, Scale = 5 },
321+
new YdbParameter("Uint8Column", YdbDbType.UInt8, (byte)1),
322+
new YdbParameter("Uint16Column", YdbDbType.UInt16, (ushort)1),
323+
new YdbParameter("Uint32Column", YdbDbType.UInt32, (uint)1),
324+
new YdbParameter("Uint64Column", YdbDbType.UInt64, (ulong)1),
325+
new YdbParameter("TextColumn", YdbDbType.Text, string.Empty),
326+
new YdbParameter("BytesColumn", YdbDbType.Bytes, Array.Empty<byte>()),
327+
new YdbParameter("DateColumn", YdbDbType.Date, DateTime.UnixEpoch),
328+
new YdbParameter("DatetimeColumn", YdbDbType.DateTime, DateTime.UnixEpoch),
329+
new YdbParameter("TimestampColumn", YdbDbType.Timestamp, DateTime.UnixEpoch),
330+
new YdbParameter("IntervalColumn", YdbDbType.Interval, TimeSpan.Zero),
331+
new YdbParameter("JsonColumn", YdbDbType.Json, "{}"),
332+
new YdbParameter("JsonDocumentColumn", YdbDbType.JsonDocument, "{}")
333+
}
334+
}.ExecuteNonQueryAsync();
335+
336+
var ydbDataReader = await new YdbCommand(ydbConnection)
337+
{
338+
CommandText = $"""
339+
SELECT
340+
Int32Column, BoolColumn, Int64Column, Int16Column, Int8Column, FloatColumn, DoubleColumn,
341+
DefaultDecimalColumn, CustomDecimalColumn, Uint8Column, Uint16Column, Uint32Column,
342+
Uint64Column, TextColumn, BytesColumn, DateColumn, DatetimeColumn, TimestampColumn,
343+
IntervalColumn, JsonColumn, JsonDocumentColumn
344+
FROM {tableName};
345+
"""
346+
}.ExecuteReaderAsync();
347+
348+
Assert.True(ydbDataReader.Read());
349+
Assert.Equal(1, ydbDataReader.GetInt32(0));
350+
Assert.True(ydbDataReader.GetBoolean(1));
351+
Assert.Equal(1, ydbDataReader.GetInt64(2));
352+
Assert.Equal(1, ydbDataReader.GetInt16(3));
353+
Assert.Equal(1, ydbDataReader.GetSByte(4));
354+
Assert.Equal(1.0, ydbDataReader.GetFloat(5));
355+
Assert.Equal(1.0, ydbDataReader.GetDouble(6));
356+
Assert.Equal(1.000000000m, ydbDataReader.GetDecimal(7));
357+
Assert.Equal(1.00000m, ydbDataReader.GetDecimal(8));
358+
Assert.Equal(1, ydbDataReader.GetByte(9));
359+
Assert.Equal(1, ydbDataReader.GetUint16(10));
360+
Assert.Equal((uint)1, ydbDataReader.GetUint32(11));
361+
Assert.Equal((ulong)1, ydbDataReader.GetUint64(12));
362+
Assert.Equal(string.Empty, ydbDataReader.GetString(13));
363+
Assert.Equal(Array.Empty<byte>(), ydbDataReader.GetBytes(14));
364+
Assert.Equal(DateTime.UnixEpoch, ydbDataReader.GetDateTime(15));
365+
Assert.Equal(DateTime.UnixEpoch, ydbDataReader.GetDateTime(16));
366+
Assert.Equal(DateTime.UnixEpoch, ydbDataReader.GetDateTime(17));
367+
Assert.Equal(TimeSpan.Zero, ydbDataReader.GetInterval(18));
368+
Assert.Equal("{}", ydbDataReader.GetJson(19));
369+
Assert.Equal("{}", ydbDataReader.GetJsonDocument(20));
370+
Assert.False(ydbDataReader.Read());
371+
await ydbDataReader.CloseAsync();
372+
373+
await new YdbCommand(ydbConnection) { CommandText = $"DROP TABLE {tableName}" }.ExecuteNonQueryAsync();
374+
}
253375
}

0 commit comments

Comments
 (0)