@@ -540,72 +540,72 @@ SELECT * FROM AS_TABLE($arg);
540540 require .Greater (t , partsWithLittleSize , 1 )
541541}
542542
543- func TestQueryWideTypesForDateAndTime (t * testing.T ) {
543+ func TestQueryWideDateTimeTypes (t * testing.T ) {
544544 if os .Getenv ("YDB_VERSION" ) != "nightly" && version .Lt (os .Getenv ("YDB_VERSION" ), "25.1" ) {
545545 t .Skip ("require enables transactions for topics" )
546546 }
547547
548548 scope := newScope (t )
549549
550550 for _ , tt := range []struct {
551- name string
552- sql string
553- expValue value.Value
554- expTime time.Time
551+ name string
552+ sql string
553+ expYdbValue value.Value
554+ expGoValue time.Time
555555 }{
556556 {
557557 name : "Date" ,
558558 sql : `SELECT
559559 CAST("2000-01-01" AS Date),
560560 CAST("2000-01-01" AS Date),
561561 ;` ,
562- expValue : value .OptionalValue (value .DateValueFromTime (time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ))),
563- expTime : time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ),
562+ expYdbValue : value .OptionalValue (value .DateValueFromTime (time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ))),
563+ expGoValue : time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ),
564564 },
565565 {
566566 name : "Datetime" ,
567567 sql : `SELECT
568568 CAST("2000-01-01T00:00:00Z" AS Datetime),
569569 CAST("2000-01-01T00:00:00Z" AS Datetime),
570570 ;` ,
571- expValue : value .OptionalValue (value .DatetimeValueFromTime (time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ))),
572- expTime : time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ),
571+ expYdbValue : value .OptionalValue (value .DatetimeValueFromTime (time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ))),
572+ expGoValue : time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ),
573573 },
574574 {
575575 name : "Timestamp" ,
576576 sql : `SELECT
577577 CAST("2000-01-01T00:00:00.123456789Z" AS Timestamp),
578578 CAST("2000-01-01T00:00:00.123456789Z" AS Timestamp),
579579 ;` ,
580- expValue : value .OptionalValue (value .TimestampValueFromTime (time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 123456789 , time .UTC ))),
581- expTime : time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 123456000 , time .UTC ),
580+ expYdbValue : value .OptionalValue (value .TimestampValueFromTime (time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 123456789 , time .UTC ))),
581+ expGoValue : time .Date (2000 , 1 , 1 , 0 , 0 , 0 , 123456000 , time .UTC ),
582582 },
583583 {
584584 name : "Date32" ,
585585 sql : `SELECT
586586 CAST("1000-01-01" AS Date32),
587587 CAST("1000-01-01" AS Date32),
588588 ;` ,
589- expValue : value .OptionalValue (value .Date32ValueFromTime (time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ))),
590- expTime : time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ),
589+ expYdbValue : value .OptionalValue (value .Date32ValueFromTime (time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ))),
590+ expGoValue : time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ),
591591 },
592592 {
593593 name : "Datetime64" ,
594594 sql : `SELECT
595595 CAST("1000-01-01T00:00:00Z" AS Datetime64),
596596 CAST("1000-01-01T00:00:00Z" AS Datetime64),
597597 ;` ,
598- expValue : value .OptionalValue (value .Datetime64ValueFromTime (time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ))),
599- expTime : time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ),
598+ expYdbValue : value .OptionalValue (value .Datetime64ValueFromTime (time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ))),
599+ expGoValue : time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 0 , time .UTC ),
600600 },
601601 {
602602 name : "Timestamp64" ,
603603 sql : `SELECT
604604 CAST("1000-01-01T00:00:00.123456789Z" AS Timestamp64),
605605 CAST("1000-01-01T00:00:00.123456789Z" AS Timestamp64),
606606 ;` ,
607- expValue : value .OptionalValue (value .Timestamp64ValueFromTime (time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 123456789 , time .UTC ))),
608- expTime : time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 123456000 , time .UTC ),
607+ expYdbValue : value .OptionalValue (value .Timestamp64ValueFromTime (time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 123456789 , time .UTC ))),
608+ expGoValue : time .Date (1000 , 1 , 1 , 0 , 0 , 0 , 123456000 , time .UTC ),
609609 },
610610 } {
611611 t .Run (tt .name , func (t * testing.T ) {
@@ -617,26 +617,91 @@ func TestQueryWideTypesForDateAndTime(t *testing.T) {
617617 )
618618 err = row .Scan (& actValue , & actTime )
619619 require .NoError (t , err )
620- require .Equal (t , tt .expValue , actValue )
621- require .Equal (t , tt .expTime , actTime .UTC ())
620+ require .Equal (t , tt .expYdbValue , actValue )
621+ require .Equal (t , tt .expGoValue , actTime .UTC ())
622622 row , err = scope .Driver ().Query ().QueryRow (scope .Ctx ,
623623 fmt .Sprintf (`
624624 DECLARE $p1 AS %s;
625625 DECLARE $p2 AS %s;
626626 SELECT $p1, $p2` ,
627- tt .expValue .Type ().Yql (),
628- tt .expValue .Type ().Yql (),
627+ tt .expYdbValue .Type ().Yql (),
628+ tt .expYdbValue .Type ().Yql (),
629629 ),
630630 query .WithParameters (ydb .ParamsBuilder ().
631- Param ("$p1" ).Any (tt .expValue ).
632- Param ("$p2" ).Any (tt .expValue ).
631+ Param ("$p1" ).Any (tt .expYdbValue ).
632+ Param ("$p2" ).Any (tt .expYdbValue ).
633633 Build (),
634634 ),
635635 )
636636 require .NoError (t , err )
637637 err = row .Scan (& actValue , & actTime )
638- require .Equal (t , tt .expValue , actValue )
639- require .Equal (t , tt .expTime , actTime .UTC ())
638+ require .Equal (t , tt .expYdbValue , actValue )
639+ require .Equal (t , tt .expGoValue , actTime .UTC ())
640+ })
641+ }
642+ }
643+
644+ func TestQueryWideIntervalTypes (t * testing.T ) {
645+ if os .Getenv ("YDB_VERSION" ) != "nightly" && version .Lt (os .Getenv ("YDB_VERSION" ), "25.1" ) {
646+ t .Skip ("require enables transactions for topics" )
647+ }
648+
649+ scope := newScope (t )
650+
651+ for _ , tt := range []struct {
652+ name string
653+ sql string
654+ expYdbValue value.Value
655+ expGoValue time.Duration
656+ }{
657+ {
658+ name : "Interval" ,
659+ sql : `SELECT
660+ CAST("PT20M34.56789S" AS Interval),
661+ CAST("PT20M34.56789S" AS Interval),
662+ ;` ,
663+ expYdbValue : value .OptionalValue (value .IntervalValueFromDuration (1234567890 * time .Microsecond )),
664+ expGoValue : 1234567890 * time .Microsecond ,
665+ },
666+ {
667+ name : "Interval64" ,
668+ sql : `SELECT
669+ CAST("PT20M34.56789S" AS Interval64),
670+ CAST("PT20M34.56789S" AS Interval64),
671+ ;` ,
672+ expYdbValue : value .OptionalValue (value .Interval64ValueFromDuration (time .Duration (1234567890 ))),
673+ expGoValue : time .Duration (1234567890 ),
674+ },
675+ } {
676+ t .Run (tt .name , func (t * testing.T ) {
677+ row , err := scope .Driver ().Query ().QueryRow (scope .Ctx , tt .sql )
678+ require .NoError (t , err )
679+ var (
680+ actValue value.Value
681+ actInterval time.Duration
682+ )
683+ err = row .Scan (& actValue , & actInterval )
684+ require .NoError (t , err )
685+ require .Equal (t , tt .expYdbValue , actValue )
686+ require .Equal (t , tt .expGoValue , actInterval )
687+ row , err = scope .Driver ().Query ().QueryRow (scope .Ctx ,
688+ fmt .Sprintf (`
689+ DECLARE $p1 AS %s;
690+ DECLARE $p2 AS %s;
691+ SELECT $p1, $p2` ,
692+ tt .expYdbValue .Type ().Yql (),
693+ tt .expYdbValue .Type ().Yql (),
694+ ),
695+ query .WithParameters (ydb .ParamsBuilder ().
696+ Param ("$p1" ).Any (tt .expYdbValue ).
697+ Param ("$p2" ).Any (tt .expYdbValue ).
698+ Build (),
699+ ),
700+ )
701+ require .NoError (t , err )
702+ err = row .Scan (& actValue , & actInterval )
703+ require .Equal (t , tt .expYdbValue , actValue )
704+ require .Equal (t , tt .expGoValue , actInterval )
640705 })
641706 }
642707}
0 commit comments