46
46
* <p>
47
47
* Note that the tests below do not use ORM's annotations below to calculate
48
48
* if a Dialect supports Format or Timezone types:
49
- * @RequiresDialectFeature(feature = DialectFeatureChecks.SupportsFormat.class)
50
- * @RequiresDialectFeature(feature = DialectFeatureChecks.SupportsTimezoneTypes.class....)
49
+ *
50
+ * <pre>{@code
51
+ * @RequiresDialectFeature(feature = DialectFeatureChecks.SupportsFormat.class)
52
+ * @RequiresDialectFeature(feature = DialectFeatureChecks.SupportsTimezoneTypes.class....)
53
+ * }</pre>
51
54
* </p>
52
55
* <p>
53
56
* It appears that DB2, SQLServer and Oracle do not yet support FORMAT and none of reactive's supported Dialects
54
- * support Timezone Types via Offset, so the ORM's testNormalizeOffset(...) method is not included in these tests.
57
+ * support Timezone Types via Offset, so the ORM's {@code testNormalizeOffset(...)} method is not included in these tests.
55
58
* </p>
56
59
*/
57
60
@ Timeout (value = 10 , timeUnit = MINUTES )
@@ -62,36 +65,22 @@ public class TimeZoneStorageMappingTest extends BaseReactiveTest {
62
65
public DBSelectionExtension selectionRule = DBSelectionExtension .skipTestsFor ( SQLSERVER );
63
66
64
67
private static final ZoneOffset JVM_TIMEZONE_OFFSET = OffsetDateTime .now ().getOffset ();
68
+
65
69
private static final OffsetTime OFFSET_TIME = OffsetTime .of (
66
- LocalTime .of (
67
- 12 ,
68
- 0 ,
69
- 0
70
- ),
70
+ LocalTime .of ( 12 , 0 , 0 ),
71
71
ZoneOffset .ofHoursMinutes ( 5 , 45 )
72
72
);
73
+
73
74
private static final OffsetDateTime OFFSET_DATE_TIME = OffsetDateTime .of (
74
- LocalDateTime .of (
75
- 2022 ,
76
- 3 ,
77
- 1 ,
78
- 12 ,
79
- 0 ,
80
- 0
81
- ),
75
+ LocalDateTime .of ( 2022 , 3 , 1 , 12 , 0 , 0 ),
82
76
ZoneOffset .ofHoursMinutes ( 5 , 45 )
83
77
);
78
+
84
79
private static final ZonedDateTime ZONED_DATE_TIME = ZonedDateTime .of (
85
- LocalDateTime .of (
86
- 2022 ,
87
- 3 ,
88
- 1 ,
89
- 12 ,
90
- 0 ,
91
- 0
92
- ),
80
+ LocalDateTime .of ( 2022 , 3 , 1 , 12 , 0 , 0 ),
93
81
ZoneOffset .ofHoursMinutes ( 5 , 45 )
94
82
);
83
+
95
84
private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter .ofPattern ( "HH:mm:ssxxx" );
96
85
private static final DateTimeFormatter FORMATTER = DateTimeFormatter .ofPattern ( "dd/MM/yyyy 'at' HH:mm:ssxxx" );
97
86
@@ -108,8 +97,7 @@ protected void setProperties(Configuration configuration) {
108
97
109
98
@ BeforeEach
110
99
public void populateDb (VertxTestContext context ) {
111
- TimeZoneStorageEntity entity = new TimeZoneStorageEntity ( 1 , OFFSET_TIME , OFFSET_DATE_TIME , ZONED_DATE_TIME );
112
-
100
+ TimeZoneStorageEntity entity = new TimeZoneStorageEntity ( 1 , OFFSET_TIME , OFFSET_DATE_TIME , ZONED_DATE_TIME );
113
101
test ( context , getMutinySessionFactory ().withTransaction ( (s , t ) -> s .persist ( entity ) ) );
114
102
}
115
103
@@ -136,87 +124,89 @@ public void testOffsetRetainedFormatColumn(VertxTestContext context) {
136
124
public void testOffsetRetained (VertxTestContext context , String suffix ) {
137
125
test ( context , openSession ()
138
126
.thenCompose ( session -> session .createQuery (
139
- "select " +
140
- "e.offsetTime" + suffix + ", " +
141
- "e.offsetDateTime" + suffix + ", " +
142
- "e.zonedDateTime" + suffix + ", " +
143
- "extract(offset from e.offsetTime" + suffix + "), " +
144
- "extract(offset from e.offsetDateTime" + suffix + "), " +
145
- "extract(offset from e.zonedDateTime" + suffix + "), " +
146
- "e.offsetTime" + suffix + " + 1 hour, " +
147
- "e.offsetDateTime" + suffix + " + 1 hour, " +
148
- "e.zonedDateTime" + suffix + " + 1 hour, " +
149
- "e.offsetTime" + suffix + " + 1 hour - e.offsetTime" + suffix + ", " +
150
- "e.offsetDateTime" + suffix + " + 1 hour - e.offsetDateTime" + suffix + ", " +
151
- "e.zonedDateTime" + suffix + " + 1 hour - e.zonedDateTime" + suffix + ", " +
152
- "1 from TimeZoneStorageEntity e " +
153
- "where e.offsetDateTime" + suffix + " = e.offsetDateTime" + suffix ,
154
- Tuple .class
155
- ).getSingleResult ()
156
- .thenAccept ( result -> {
157
- assertThat ( result .get ( 0 , OffsetTime .class ) ).isEqualTo ( OFFSET_TIME );
158
- assertThat ( result .get ( 1 , OffsetDateTime .class ) ).isEqualTo ( OFFSET_DATE_TIME );
159
- assertThat ( result .get ( 2 , ZonedDateTime .class ) ).isEqualTo ( ZONED_DATE_TIME );
160
- assertThat ( result .get ( 3 , ZoneOffset .class ) ).isEqualTo ( OFFSET_TIME .getOffset () );
161
- assertThat ( result .get ( 4 , ZoneOffset .class ) ).isEqualTo ( OFFSET_DATE_TIME .getOffset () );
162
- assertThat ( result .get ( 5 , ZoneOffset .class ) ).isEqualTo ( ZONED_DATE_TIME .getOffset () );
163
- assertThat ( result .get ( 6 , OffsetTime .class ) ).isEqualTo ( OFFSET_TIME .plusHours ( 1L ) );
164
- assertThat ( result .get ( 7 , OffsetDateTime .class ) ).isEqualTo ( OFFSET_DATE_TIME .plusHours ( 1L ) );
165
- assertThat ( result .get ( 8 , ZonedDateTime .class ) ).isEqualTo ( ZONED_DATE_TIME .plusHours ( 1L ) );
166
- assertThat ( result .get ( 9 , Duration .class ) ).isEqualTo ( Duration .ofHours ( 1L ) );
167
- assertThat ( result .get ( 10 , Duration .class ) ).isEqualTo ( Duration .ofHours ( 1L ) );
168
- assertThat ( result .get ( 11 , Duration .class ) ).isEqualTo ( Duration .ofHours ( 1L ) );
169
- } )
170
- )
127
+ "select " +
128
+ "e.offsetTime" + suffix + ", " +
129
+ "e.offsetDateTime" + suffix + ", " +
130
+ "e.zonedDateTime" + suffix + ", " +
131
+ "extract(offset from e.offsetTime" + suffix + "), " +
132
+ "extract(offset from e.offsetDateTime" + suffix + "), " +
133
+ "extract(offset from e.zonedDateTime" + suffix + "), " +
134
+ "e.offsetTime" + suffix + " + 1 hour, " +
135
+ "e.offsetDateTime" + suffix + " + 1 hour, " +
136
+ "e.zonedDateTime" + suffix + " + 1 hour, " +
137
+ "e.offsetTime" + suffix + " + 1 hour - e.offsetTime" + suffix + ", " +
138
+ "e.offsetDateTime" + suffix + " + 1 hour - e.offsetDateTime" + suffix + ", " +
139
+ "e.zonedDateTime" + suffix + " + 1 hour - e.zonedDateTime" + suffix + ", " +
140
+ "1 from TimeZoneStorageEntity e " +
141
+ "where e.offsetDateTime" + suffix + " = e.offsetDateTime" + suffix ,
142
+ Tuple .class
143
+ ).getSingleResult () )
144
+ .thenAccept ( result -> {
145
+ assertThat ( result .get ( 0 , OffsetTime .class ) ).isEqualTo ( OFFSET_TIME );
146
+ assertThat ( result .get ( 1 , OffsetDateTime .class ) ).isEqualTo ( OFFSET_DATE_TIME );
147
+ assertThat ( result .get ( 2 , ZonedDateTime .class ) ).isEqualTo ( ZONED_DATE_TIME );
148
+ assertThat ( result .get ( 3 , ZoneOffset .class ) ).isEqualTo ( OFFSET_TIME .getOffset () );
149
+ assertThat ( result .get ( 4 , ZoneOffset .class ) ).isEqualTo ( OFFSET_DATE_TIME .getOffset () );
150
+ assertThat ( result .get ( 5 , ZoneOffset .class ) ).isEqualTo ( ZONED_DATE_TIME .getOffset () );
151
+ assertThat ( result .get ( 6 , OffsetTime .class ) ).isEqualTo ( OFFSET_TIME .plusHours ( 1L ) );
152
+ assertThat ( result .get ( 7 , OffsetDateTime .class ) ).isEqualTo ( OFFSET_DATE_TIME .plusHours ( 1L ) );
153
+ assertThat ( result .get ( 8 , ZonedDateTime .class ) ).isEqualTo ( ZONED_DATE_TIME .plusHours ( 1L ) );
154
+ assertThat ( result .get ( 9 , Duration .class ) ).isEqualTo ( Duration .ofHours ( 1L ) );
155
+ assertThat ( result .get ( 10 , Duration .class ) ).isEqualTo ( Duration .ofHours ( 1L ) );
156
+ assertThat ( result .get ( 11 , Duration .class ) ).isEqualTo ( Duration .ofHours ( 1L ) );
157
+ } )
171
158
);
172
159
}
173
160
174
161
public void testOffsetRetainedFormat (VertxTestContext context , String suffix ) {
175
162
test ( context , openSession ()
176
163
.thenCompose ( session -> session .createQuery (
177
- "select " +
178
- "format(e.offsetTime" + suffix + " as 'HH:mm:ssxxx'), " +
179
- "format(e.offsetDateTime" + suffix + " as 'dd/MM/yyyy ''at'' HH:mm:ssxxx'), " +
180
- "format(e.zonedDateTime" + suffix + " as 'dd/MM/yyyy ''at'' HH:mm:ssxxx'), " +
181
- "1 from TimeZoneStorageEntity e " +
182
- "where e.offsetDateTime" + suffix + " = e.offsetDateTime" + suffix ,
183
- Tuple .class
184
- ).getSingleResult ()
185
- .thenAccept ( result -> {
186
- assertThat ( result .get ( 0 , String .class ) ).isEqualTo ( TIME_FORMATTER .format ( OFFSET_TIME ) );
187
- assertThat ( result .get ( 1 , String .class ) ).isEqualTo ( FORMATTER .format ( OFFSET_DATE_TIME ) );
188
- assertThat ( result .get ( 2 , String .class ) ).isEqualTo ( FORMATTER .format ( ZONED_DATE_TIME ) );
189
- } )
190
- )
164
+ "select " +
165
+ "format(e.offsetTime" + suffix + " as 'HH:mm:ssxxx'), " +
166
+ "format(e.offsetDateTime" + suffix + " as 'dd/MM/yyyy ''at'' HH:mm:ssxxx'), " +
167
+ "format(e.zonedDateTime" + suffix + " as 'dd/MM/yyyy ''at'' HH:mm:ssxxx'), " +
168
+ "1 from TimeZoneStorageEntity e " +
169
+ "where e.offsetDateTime" + suffix + " = e.offsetDateTime" + suffix ,
170
+ Tuple .class
171
+ ).getSingleResult () )
172
+ .thenAccept ( result -> {
173
+ assertThat ( result .get ( 0 , String .class ) ).isEqualTo ( TIME_FORMATTER .format ( OFFSET_TIME ) );
174
+ assertThat ( result .get ( 1 , String .class ) ).isEqualTo ( FORMATTER .format ( OFFSET_DATE_TIME ) );
175
+ assertThat ( result .get ( 2 , String .class ) ).isEqualTo ( FORMATTER .format ( ZONED_DATE_TIME ) );
176
+ } )
191
177
);
192
178
}
193
179
194
180
@ Test
195
181
public void testNormalize (VertxTestContext context ) {
196
182
test ( context , openSession ()
197
183
.thenCompose ( session -> session .createQuery (
198
- "select " +
199
- "e.offsetTimeNormalized, " +
200
- "e.offsetDateTimeNormalized, " +
201
- "e.zonedDateTimeNormalized, " +
202
- "e.offsetTimeNormalizedUtc, " +
203
- "e.offsetDateTimeNormalizedUtc, " +
204
- "e.zonedDateTimeNormalizedUtc " +
205
- "from TimeZoneStorageEntity e" ,
206
- Tuple .class
207
- ).getSingleResult ()
208
- .thenAccept ( result -> {
209
- assertThat ( result .get ( 0 , OffsetTime .class ).toLocalTime ()).isEqualTo ( OFFSET_TIME .withOffsetSameInstant ( JVM_TIMEZONE_OFFSET ).toLocalTime () );
210
- assertThat ( result .get ( 0 , OffsetTime .class ).getOffset ()).isEqualTo ( JVM_TIMEZONE_OFFSET );
211
- assertThat ( result .get ( 1 , OffsetDateTime .class ).toInstant ()).isEqualTo ( OFFSET_DATE_TIME .toInstant () );
212
- assertThat ( result .get ( 2 , ZonedDateTime .class ).toInstant ()).isEqualTo ( ZONED_DATE_TIME .toInstant () );
213
- assertThat ( result .get ( 3 , OffsetTime .class ).toLocalTime ()).isEqualTo ( OFFSET_TIME .withOffsetSameInstant ( ZoneOffset .UTC ).toLocalTime () );
214
- assertThat ( result .get ( 3 , OffsetTime .class ).getOffset ()).isEqualTo ( ZoneOffset .UTC );
215
- assertThat ( result .get ( 4 , OffsetDateTime .class ).toInstant ()).isEqualTo ( OFFSET_DATE_TIME .toInstant () );
216
- assertThat ( result .get ( 5 , ZonedDateTime .class ).toInstant ()).isEqualTo ( ZONED_DATE_TIME .toInstant () );
217
- }
218
- )
219
- )
184
+ "select " +
185
+ "e.offsetTimeNormalized, " +
186
+ "e.offsetDateTimeNormalized, " +
187
+ "e.zonedDateTimeNormalized, " +
188
+ "e.offsetTimeNormalizedUtc, " +
189
+ "e.offsetDateTimeNormalizedUtc, " +
190
+ "e.zonedDateTimeNormalizedUtc " +
191
+ "from TimeZoneStorageEntity e" ,
192
+ Tuple .class
193
+ ).getSingleResult () )
194
+ .thenAccept ( result -> {
195
+ assertThat ( result .get ( 0 , OffsetTime .class ).toLocalTime () )
196
+ .isEqualTo ( OFFSET_TIME .withOffsetSameInstant ( JVM_TIMEZONE_OFFSET ).toLocalTime () );
197
+ assertThat ( result .get ( 0 , OffsetTime .class ).getOffset () ).isEqualTo ( JVM_TIMEZONE_OFFSET );
198
+ assertThat ( result .get ( 1 , OffsetDateTime .class ).toInstant () )
199
+ .isEqualTo ( OFFSET_DATE_TIME .toInstant () );
200
+ assertThat ( result .get ( 2 , ZonedDateTime .class ).toInstant () )
201
+ .isEqualTo ( ZONED_DATE_TIME .toInstant () );
202
+ assertThat ( result .get ( 3 , OffsetTime .class ).toLocalTime () )
203
+ .isEqualTo ( OFFSET_TIME .withOffsetSameInstant ( ZoneOffset .UTC ).toLocalTime () );
204
+ assertThat ( result .get ( 3 , OffsetTime .class ).getOffset () ).isEqualTo ( ZoneOffset .UTC );
205
+ assertThat ( result .get ( 4 , OffsetDateTime .class ).toInstant () )
206
+ .isEqualTo ( OFFSET_DATE_TIME .toInstant () );
207
+ assertThat ( result .get ( 5 , ZonedDateTime .class ).toInstant () )
208
+ .isEqualTo ( ZONED_DATE_TIME .toInstant () );
209
+ } )
220
210
);
221
211
}
222
212
@@ -226,7 +216,6 @@ public static class TimeZoneStorageEntity {
226
216
@ Id
227
217
public Integer id ;
228
218
229
- //tag::time-zone-column-examples-mapping-example[]
230
219
@ TimeZoneStorage (TimeZoneStorageType .COLUMN )
231
220
@ TimeZoneColumn (name = "birthtime_offset_offset" )
232
221
@ Column (name = "birthtime_offset" )
@@ -241,7 +230,6 @@ public static class TimeZoneStorageEntity {
241
230
@ TimeZoneColumn (name = "birthday_zoned_offset" )
242
231
@ Column (name = "birthday_zoned" )
243
232
public ZonedDateTime zonedDateTimeColumn ;
244
- //end::time-zone-column-examples-mapping-example[]
245
233
246
234
@ TimeZoneStorage
247
235
@ Column (name = "birthtime_offset_auto" )
0 commit comments