22using System . Globalization ;
33using Xunit ;
44using Ydb . Sdk . Ado . YdbType ;
5+ using Ydb . Sdk . Value ;
56
67namespace 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