@@ -531,6 +531,8 @@ public void testSqlTimeSetters() throws Exception {
531
531
.format (withFract ? TIME_FORMATTER_WITH_MILLIS_NO_OFFCET : TimeUtil .TIME_FORMATTER_NO_FRACT_NO_OFFSET )
532
532
: expTimeNoMs ;
533
533
534
+ String expDate8_0_28 = zdt_19700101_120000_123_at_senderTz .format (DateTimeFormatter .ofPattern ("20HH-mm-ss" ));
535
+
534
536
String expTimeNoMsCal = zdt_19700101_120000_123_at_calendarTz .toLocalTime ()
535
537
.format (TimeUtil .TIME_FORMATTER_NO_FRACT_NO_OFFSET );
536
538
String expTimeCal = sendFractionalSeconds && sendTimeFract
@@ -568,7 +570,9 @@ public void testSqlTimeSetters() throws Exception {
568
570
569
571
/* Into DATE field */
570
572
571
- String expDateErr = incorrectDateErr .replace ("X" , expTimeSendTimeFract );
573
+ String expDateErr = incorrectDateErr .replace ("X" ,
574
+ useSSPS && !(sendTimeFract && sendFractionalSeconds ) && versionMeetsMinimum (8 , 0 , 28 ) ? expDate8_0_28
575
+ : expTimeSendTimeFract );
572
576
String expDateErrWithCal = incorrectDateErr .replace ("X" , expTimeCal );
573
577
574
578
if (useSSPS ) {
@@ -630,7 +634,9 @@ public void testSqlTimeSetters() throws Exception {
630
634
631
635
String expDatetime = expDate + " " + expTimeSendTimeFract ;
632
636
String expDatetimeWithCal = expDate + " " + expTimeCal ;
633
- String expDatetimeErr = incorrectDatetimeErr .replace ("X" , expTimeSendTimeFract );
637
+ String expDatetimeErr = incorrectDatetimeErr .replace ("X" ,
638
+ useSSPS && !(sendTimeFract && sendFractionalSeconds ) && versionMeetsMinimum (8 , 0 , 28 ) ? expDate8_0_28
639
+ : expTimeSendTimeFract );
634
640
String expDatetimeErrWithCal = incorrectDatetimeErr .replace ("X" , expTimeCal );
635
641
636
642
if (useSSPS ) {
@@ -1848,6 +1854,8 @@ public void testLocalTimeSetters() throws Exception {
1848
1854
String expTimeNoMs = zdt_no_date_120000_123456_on_wire .format (TimeUtil .TIME_FORMATTER_NO_FRACT_NO_OFFSET );
1849
1855
String expTime6 = zdt_no_date_120000_123456_on_wire .format (timeFmt );
1850
1856
String expTime9 = zdt_no_date_120000_123456_on_wire .format (timeFmtForChars );
1857
+ String expTime8_0_28 = zdt_no_date_120000_123456_on_wire .format (DateTimeFormatter .ofPattern ("20HH-mm-ss" ));
1858
+
1851
1859
String expDatetimeDef = zdt_no_date_120000_123456_on_wire
1852
1860
.format (useSSPS ? dateTimeFmt : DateTimeFormatter .ofPattern ("20HH-mm-ss 00:00:00" ));
1853
1861
String expDefTimestamp = zdt_no_date_120000_123456_on_wire .withZoneSameInstant (tz_UTC .toZoneId ()).format (dateTimeFmt );
@@ -1860,9 +1868,13 @@ public void testLocalTimeSetters() throws Exception {
1860
1868
: "" );
1861
1869
1862
1870
String expDateErr6 = incorrectDateErr .replace ("X" , expTime6 );
1863
- String expDateErr9 = incorrectDateErr .replace ("X" , expTime9 );
1871
+
1872
+ String expDateErr9 = incorrectDateErr .replace ("X" ,
1873
+ useSSPS && !sendFractionalSeconds && versionMeetsMinimum (8 , 0 , 28 ) ? expTime8_0_28 : expTime9 );
1874
+
1864
1875
String expDatetimeErr6 = incorrectDatetimeErr .replace ("X" , expTime6 );
1865
- String expDatetimeErr9 = incorrectDatetimeErr .replace ("X" , expTime9 );
1876
+ String expDatetimeErr9 = incorrectDatetimeErr .replace ("X" ,
1877
+ useSSPS && !sendFractionalSeconds && versionMeetsMinimum (8 , 0 , 28 ) ? expTime8_0_28 : expTime9 );
1866
1878
1867
1879
/* Unsupported conversions */
1868
1880
@@ -2317,6 +2329,10 @@ public void testOffsetTimeSetters() throws Exception {
2317
2329
String expTimeNoMs = zdt_no_date_120000_123456_on_wire .format (TimeUtil .TIME_FORMATTER_NO_FRACT_NO_OFFSET );
2318
2330
String expTime = zdt_no_date_120000_123456_on_wire .format (timeFmt );
2319
2331
String expTimeTz = ot_120000_123456_05_00 .format (timeFmtTz ).replace ("+" , "\\ +" );
2332
+ String expTimeTz8_0_28 = ot_120000_123456_05_00 .format (DateTimeFormatter .ofPattern ("20HH-mm-ss X:00:00" )).replace ("+" ,
2333
+ "" );
2334
+ String expDatetimeTz8_0_28 = ot_120000_123456_05_00 .format (DateTimeFormatter .ofPattern ("20HH-mm-ss X:00:00.000000" ))
2335
+ .replace ("+" , "" );
2320
2336
2321
2337
String expDatetimeDef = zdt_no_date_120000_123456_on_wire
2322
2338
.format (useSSPS ? dateTimeFmt : DateTimeFormatter .ofPattern ("20HH-mm-ss 00:00:00" ));
@@ -2330,10 +2346,12 @@ public void testOffsetTimeSetters() throws Exception {
2330
2346
: "" );
2331
2347
2332
2348
String expDateErr = incorrectDateErr .replace ("X" , expTime );
2333
- String expDateErrTz = incorrectDateErr .replace ("X" , expTimeTz );
2349
+ String expDateErrTz = incorrectDateErr .replace ("X" ,
2350
+ useSSPS && !sendFractionalSeconds && versionMeetsMinimum (8 , 0 , 28 ) ? expTimeTz8_0_28 : expTimeTz );
2334
2351
String expTimeErrTz = incorrectTimeErr .replace ("X" , expTimeTz );
2335
2352
String expDatetimeErr = incorrectDatetimeErr .replace ("X" , expTime );
2336
- String expDatetimeErrTz = incorrectDatetimeErr .replace ("X" , expTimeTz );
2353
+ String expDatetimeErrTz = incorrectDatetimeErr .replace ("X" ,
2354
+ useSSPS && !sendFractionalSeconds && versionMeetsMinimum (8 , 0 , 28 ) ? expDatetimeTz8_0_28 : expTimeTz );
2337
2355
2338
2356
/* Unsupported conversions */
2339
2357
@@ -2464,9 +2482,9 @@ public void testOffsetTimeSetters() throws Exception {
2464
2482
public void testOffsetDatetimeSetters () throws Exception {
2465
2483
boolean withFract = versionMeetsMinimum (5 , 6 , 4 ); // fractional seconds are not supported in previous versions
2466
2484
boolean allowsOffset = versionMeetsMinimum (8 , 0 , 19 );
2467
- // Starting from MySQL 8.0.22 server also converts TIMESTAMP_WITH_TIMEZONE value to the server time zone for column types other than TIMESTAMP and DATETIME.
2468
- // In MySQL 8.0.26 it was reverted.
2469
- boolean serverConvertsTzForAllTypes = versionMeetsMinimum (8 , 0 , 22 ) && !versionMeetsMinimum (8 , 0 , 26 );
2485
+ // Starting from MySQL 8.0.22 server also converts string values in TIMESTAMP_WITH_TIMEZONE format to the session time zone
2486
+ // for column types other than TIMESTAMP and DATETIME. In MySQL 8.0.26 it was reverted, restored in MySQL 8.0.28 .
2487
+ boolean serverConvertsTzForAllTypes = versionMeetsMinimum (8 , 0 , 22 ) && !versionMeetsMinimum (8 , 0 , 26 ) || versionMeetsMinimum ( 8 , 0 , 28 ) ;
2470
2488
2471
2489
createTable (tYear , "(id INT, d YEAR)" );
2472
2490
createTable (tDate , "(id INT, d DATE)" );
@@ -2554,8 +2572,7 @@ public void testOffsetDatetimeSetters() throws Exception {
2554
2572
String expDate = zdt_20200101_120000_123456_on_wire .format (TimeUtil .DATE_FORMATTER );
2555
2573
String expDateDef = zdt_no_date_120000_123456_on_wire
2556
2574
.format (useSSPS ? TimeUtil .DATE_FORMATTER : DateTimeFormatter .ofPattern ("20HH-mm-ss" ));
2557
- // Starting from MySQL 8.0.22 TIMESTAMP_WITH_TIMEZONE value is also converted to the server time zone by server
2558
- // for column types other than TIMESTAMP or DATETIME
2575
+
2559
2576
String expDateChar = serverConvertsTzForAllTypes
2560
2577
? odt_20200101_120000_123456_05_00 .atZoneSameInstant (sessionTz .toZoneId ()).format (TimeUtil .DATE_FORMATTER )
2561
2578
: odt_20200101_120000_123456_05_00 .format (TimeUtil .DATE_FORMATTER );
@@ -2840,9 +2857,9 @@ public void testOffsetDatetimeSetters() throws Exception {
2840
2857
public void testZonedDatetimeSetters () throws Exception {
2841
2858
boolean withFract = versionMeetsMinimum (5 , 6 , 4 ); // fractional seconds are not supported in previous versions
2842
2859
boolean allowsOffset = versionMeetsMinimum (8 , 0 , 19 );
2843
- // Starting from MySQL 8.0.22 server also converts TIMESTAMP_WITH_TIMEZONE value to the server time zone for column types other than TIMESTAMP and DATETIME.
2844
- // In MySQL 8.0.26 it was reverted.
2845
- boolean serverConvertsTzForAllTypes = versionMeetsMinimum (8 , 0 , 22 ) && !versionMeetsMinimum (8 , 0 , 26 );
2860
+ // Starting from MySQL 8.0.22 server also converts string values in TIMESTAMP_WITH_TIMEZONE format to the session time zone
2861
+ // for column types other than TIMESTAMP and DATETIME. In MySQL 8.0.26 it was reverted, restored in MySQL 8.0.28 .
2862
+ boolean serverConvertsTzForAllTypes = versionMeetsMinimum (8 , 0 , 22 ) && !versionMeetsMinimum (8 , 0 , 26 ) || versionMeetsMinimum ( 8 , 0 , 28 ) ;
2846
2863
2847
2864
createTable (tYear , "(id INT, d YEAR)" );
2848
2865
createTable (tDate , "(id INT, d DATE)" );
@@ -2930,8 +2947,6 @@ public void testZonedDatetimeSetters() throws Exception {
2930
2947
String expDate = zdt_20200101_120000_123456_on_wire .format (TimeUtil .DATE_FORMATTER );
2931
2948
String expDateDef = zdt_no_date_120000_123456_on_wire
2932
2949
.format (useSSPS ? TimeUtil .DATE_FORMATTER : DateTimeFormatter .ofPattern ("20HH-mm-ss" ));
2933
- // Starting from MySQL 8.0.22 TIMESTAMP_WITH_TIMEZONE value is also converted to the server time zone by server
2934
- // for column types other than TIMESTAMP or DATETIME
2935
2950
String expDateChar = serverConvertsTzForAllTypes
2936
2951
? zdt_20200101_120000_123456_05_00 .withZoneSameInstant (sessionTz .toZoneId ()).format (TimeUtil .DATE_FORMATTER )
2937
2952
: zdt_20200101_120000_123456_05_00 .format (TimeUtil .DATE_FORMATTER );
0 commit comments