@@ -540,72 +540,72 @@ SELECT * FROM AS_TABLE($arg);
540
540
require .Greater (t , partsWithLittleSize , 1 )
541
541
}
542
542
543
- func TestQueryWideTypesForDateAndTime (t * testing.T ) {
543
+ func TestQueryWideDateTimeTypes (t * testing.T ) {
544
544
if os .Getenv ("YDB_VERSION" ) != "nightly" && version .Lt (os .Getenv ("YDB_VERSION" ), "25.1" ) {
545
545
t .Skip ("require enables transactions for topics" )
546
546
}
547
547
548
548
scope := newScope (t )
549
549
550
550
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
555
555
}{
556
556
{
557
557
name : "Date" ,
558
558
sql : `SELECT
559
559
CAST("2000-01-01" AS Date),
560
560
CAST("2000-01-01" AS Date),
561
561
;` ,
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 ),
564
564
},
565
565
{
566
566
name : "Datetime" ,
567
567
sql : `SELECT
568
568
CAST("2000-01-01T00:00:00Z" AS Datetime),
569
569
CAST("2000-01-01T00:00:00Z" AS Datetime),
570
570
;` ,
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 ),
573
573
},
574
574
{
575
575
name : "Timestamp" ,
576
576
sql : `SELECT
577
577
CAST("2000-01-01T00:00:00.123456789Z" AS Timestamp),
578
578
CAST("2000-01-01T00:00:00.123456789Z" AS Timestamp),
579
579
;` ,
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 ),
582
582
},
583
583
{
584
584
name : "Date32" ,
585
585
sql : `SELECT
586
586
CAST("1000-01-01" AS Date32),
587
587
CAST("1000-01-01" AS Date32),
588
588
;` ,
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 ),
591
591
},
592
592
{
593
593
name : "Datetime64" ,
594
594
sql : `SELECT
595
595
CAST("1000-01-01T00:00:00Z" AS Datetime64),
596
596
CAST("1000-01-01T00:00:00Z" AS Datetime64),
597
597
;` ,
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 ),
600
600
},
601
601
{
602
602
name : "Timestamp64" ,
603
603
sql : `SELECT
604
604
CAST("1000-01-01T00:00:00.123456789Z" AS Timestamp64),
605
605
CAST("1000-01-01T00:00:00.123456789Z" AS Timestamp64),
606
606
;` ,
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 ),
609
609
},
610
610
} {
611
611
t .Run (tt .name , func (t * testing.T ) {
@@ -617,26 +617,91 @@ func TestQueryWideTypesForDateAndTime(t *testing.T) {
617
617
)
618
618
err = row .Scan (& actValue , & actTime )
619
619
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 ())
622
622
row , err = scope .Driver ().Query ().QueryRow (scope .Ctx ,
623
623
fmt .Sprintf (`
624
624
DECLARE $p1 AS %s;
625
625
DECLARE $p2 AS %s;
626
626
SELECT $p1, $p2` ,
627
- tt .expValue .Type ().Yql (),
628
- tt .expValue .Type ().Yql (),
627
+ tt .expYdbValue .Type ().Yql (),
628
+ tt .expYdbValue .Type ().Yql (),
629
629
),
630
630
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 ).
633
633
Build (),
634
634
),
635
635
)
636
636
require .NoError (t , err )
637
637
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 )
640
705
})
641
706
}
642
707
}
0 commit comments