Skip to content

Commit becb272

Browse files
fix test
1 parent 47daf7e commit becb272

File tree

3 files changed

+145
-170
lines changed

3 files changed

+145
-170
lines changed

query/src/test/java/tech/ydb/query/ValueReadTest.java

Lines changed: 0 additions & 151 deletions
This file was deleted.

table/pom.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,20 @@
4141
<scope>test</scope>
4242
</dependency>
4343
</dependencies>
44+
45+
<build>
46+
<plugins>
47+
<plugin>
48+
<groupId>org.apache.maven.plugins</groupId>
49+
<artifactId>maven-surefire-plugin</artifactId>
50+
<version>3.1.0</version>
51+
<configuration>
52+
<environmentVariables>
53+
<TESTCONTAINERS_REUSE_ENABLE>true</TESTCONTAINERS_REUSE_ENABLE>
54+
<YDB_DOCKER_IMAGE>ydbplatform/local-ydb:trunk</YDB_DOCKER_IMAGE>
55+
</environmentVariables>
56+
</configuration>
57+
</plugin>
58+
</plugins>
59+
</build>
4460
</project>

table/src/test/java/tech/ydb/table/integration/ValuesReadTest.java

Lines changed: 129 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package tech.ydb.table.integration;
22

3+
import java.time.Duration;
34
import java.time.Instant;
5+
import java.time.LocalDate;
6+
import java.time.LocalDateTime;
7+
import java.time.temporal.ChronoUnit;
48
import java.util.UUID;
59

610
import org.junit.Assert;
@@ -13,6 +17,7 @@
1317
import tech.ydb.table.SessionRetryContext;
1418
import tech.ydb.table.impl.SimpleTableClient;
1519
import tech.ydb.table.query.DataQueryResult;
20+
import tech.ydb.table.query.Params;
1621
import tech.ydb.table.result.ResultSetReader;
1722
import tech.ydb.table.result.ValueReader;
1823
import tech.ydb.table.rpc.grpc.GrpcTableRpc;
@@ -124,11 +129,11 @@ private void assertTimestamp(ValueReader vr, boolean optional, Instant expected)
124129
public void timestampReadTest() {
125130
DataQueryResult result = CTX.supplyResult(
126131
s -> s.executeDataQuery("SELECT "
127-
+ "DateTime::MakeTimestamp(DateTime::FromMilliseconds(0ul)) as t1,"
128-
+ "DateTime::MakeTimestamp(DateTime::FromMicroseconds(1000ul)) as t2,"
129-
+ "DateTime::MakeTimestamp(DateTime::FromMicroseconds(4291747199999999ul)) as t3,"
130-
+ "Timestamp('1970-01-01T00:00:00.000000Z') as t4,"
131-
+ "Timestamp('2105-12-31T23:59:59.999999Z') as t5;",
132+
+ "DateTime::MakeTimestamp(DateTime::FromMilliseconds(0ul)) as t1,"
133+
+ "DateTime::MakeTimestamp(DateTime::FromMicroseconds(1000ul)) as t2,"
134+
+ "DateTime::MakeTimestamp(DateTime::FromMicroseconds(4291747199999999ul)) as t3,"
135+
+ "Timestamp('1970-01-01T00:00:00.000000Z') as t4,"
136+
+ "Timestamp('2105-12-31T23:59:59.999999Z') as t5;",
132137
TxControl.serializableRw()
133138
)
134139
).join().getValue();
@@ -146,8 +151,8 @@ public void timestampReadTest() {
146151

147152
Status invalid = CTX.supplyResult(
148153
s -> s.executeDataQuery("SELECT "
149-
+ "Timestamp('1969-12-31T23:59:59.999999Z') as t6,"
150-
+ "Timestamp('2106-01-01T00:00:00.000000Z') as t7;",
154+
+ "Timestamp('1969-12-31T23:59:59.999999Z') as t6,"
155+
+ "Timestamp('2106-01-01T00:00:00.000000Z') as t7;",
151156
TxControl.serializableRw()
152157
)
153158
).join().getStatus();
@@ -164,18 +169,18 @@ public void timestampReadTest() {
164169
public void decimalReadTest() {
165170
DataQueryResult result = CTX.supplyResult(
166171
s -> s.executeDataQuery("SELECT "
167-
+ "Decimal('9', 1, 0) AS d1, "
168-
+ "Decimal('-9', 1, 0) AS d2, "
169-
+ "Decimal('99999999999999999999999999999999999', 35, 0) AS d3, "
170-
+ "Decimal('-99999999999999999999999999999999999', 35, 0) AS d4, "
171-
+ "Decimal('9999999999999999999999999.9999999999', 35, 10) AS d5, "
172-
+ "Decimal('-9999999999999999999999999.9999999999', 35, 10) AS d6, "
173-
+ "Decimal('9.6', 1, 0) AS d7, "
174-
+ "Decimal('-9.6', 1, 0) AS d8, "
175-
+ "Decimal('99999999999999999999999999999999999.6', 35, 0) AS d9, "
176-
+ "Decimal('-99999999999999999999999999999999999.6', 35, 0) AS d10, "
177-
+ "Decimal('9999999999999999999999999.99999999996', 35, 10) AS d11, "
178-
+ "Decimal('-9999999999999999999999999.99999999996', 35, 10) AS d12;",
172+
+ "Decimal('9', 1, 0) AS d1, "
173+
+ "Decimal('-9', 1, 0) AS d2, "
174+
+ "Decimal('99999999999999999999999999999999999', 35, 0) AS d3, "
175+
+ "Decimal('-99999999999999999999999999999999999', 35, 0) AS d4, "
176+
+ "Decimal('9999999999999999999999999.9999999999', 35, 10) AS d5, "
177+
+ "Decimal('-9999999999999999999999999.9999999999', 35, 10) AS d6, "
178+
+ "Decimal('9.6', 1, 0) AS d7, "
179+
+ "Decimal('-9.6', 1, 0) AS d8, "
180+
+ "Decimal('99999999999999999999999999999999999.6', 35, 0) AS d9, "
181+
+ "Decimal('-99999999999999999999999999999999999.6', 35, 0) AS d10, "
182+
+ "Decimal('9999999999999999999999999.99999999996', 35, 10) AS d11, "
183+
+ "Decimal('-9999999999999999999999999.99999999996', 35, 10) AS d12;",
179184
TxControl.serializableRw()
180185
)
181186
).join().getValue();
@@ -223,4 +228,109 @@ public void decimalReadTest() {
223228
Assert.assertEquals(d8.getLow(), d10.getLow());
224229
Assert.assertEquals(d8.getLow(), d12.getLow());
225230
}
231+
232+
@Test
233+
public void date32datetime64timestamp64interval64() {
234+
date32datetime64timestamp64interval64Assert(
235+
LocalDate.of(988, 2, 6),
236+
LocalDateTime.of(988, 2, 7, 12, 30, 0),
237+
Instant.parse("0998-06-02T12:30:00.678901Z"),
238+
Duration.parse("-PT2S")
239+
);
240+
241+
date32datetime64timestamp64interval64Assert(
242+
LocalDate.now(),
243+
LocalDateTime.now().truncatedTo(ChronoUnit.SECONDS),
244+
Instant.now().truncatedTo(ChronoUnit.MICROS),
245+
Duration.ZERO
246+
);
247+
248+
DataQueryResult reader = CTX.supplyResult(
249+
s -> s.executeDataQuery("DECLARE $date32 AS Date32;\n" +
250+
"DECLARE $datetime64 AS Datetime64;\n" +
251+
"DECLARE $timestamp64 AS Timestamp64;\n" +
252+
"DECLARE $interval64 AS Interval64;\n" +
253+
"\n" +
254+
"$date32=Date32('998-06-02'); \n" +
255+
"$datetime64=Datetime64('0998-06-02T12:30:00Z');\n" +
256+
"$timestamp64=Timestamp64('0998-06-02T12:30:00.678901Z');\n" +
257+
"$interval64=Interval64('-PT2S');\n" +
258+
"\n" +
259+
"SELECT $date32, $datetime64, $timestamp64, $interval64;", TxControl.serializableRw())
260+
).join().getValue();
261+
262+
ResultSetReader resultSetReader = reader.getResultSet(0);
263+
264+
Assert.assertTrue(resultSetReader.next());
265+
Assert.assertEquals(LocalDate.parse("0998-06-02"), resultSetReader.getColumn(0).getDate32());
266+
Assert.assertEquals(LocalDateTime.parse("0998-06-02T12:30:00"), resultSetReader.getColumn(1).getDatetime64());
267+
Assert.assertEquals(Instant.parse("0998-06-02T12:30:00.678901Z"), resultSetReader.getColumn(2).getTimestamp64());
268+
Assert.assertEquals(Duration.parse("-PT2S"), resultSetReader.getColumn(3).getInterval64());
269+
}
270+
271+
@Test
272+
public void timestamp64ReadTest() {
273+
System.out.println(Instant.ofEpochSecond(-4611669897600L));
274+
DataQueryResult result = CTX.supplyResult(
275+
s -> s.executeDataQuery("SELECT "
276+
+ "Timestamp64('-144169-01-01T00:00:00Z') as t1,"
277+
+ "Timestamp64('148107-12-31T23:59:59.999999Z') as t2;",
278+
TxControl.serializableRw()
279+
)).join().getValue();
280+
281+
Assert.assertEquals(1, result.getResultSetCount());
282+
283+
ResultSetReader rs = result.getResultSet(0);
284+
Assert.assertTrue(rs.next());
285+
286+
assertTimestamp64(rs.getColumn("t1"), Instant.ofEpochSecond(-4611669897600L));
287+
assertTimestamp64(rs.getColumn("t2"), Instant.ofEpochSecond(4611669811199L, 999999000));
288+
289+
Status invalid = CTX.supplyResult(
290+
s -> s.executeDataQuery("SELECT "
291+
+ "Timestamp64('-144170-01-01T00:00:00Z') as t1,"
292+
+ "Timestamp64('148108-01-01T00:00:00.000000Z') as t2;",
293+
TxControl.serializableRw()
294+
)
295+
).join().getStatus();
296+
297+
Assert.assertEquals(StatusCode.GENERIC_ERROR, invalid.getCode());
298+
Issue[] issues = invalid.getIssues();
299+
Assert.assertEquals(2, issues.length);
300+
Assert.assertEquals("Invalid value \"-144170-01-01T00:00:00Z\" for type Timestamp64", issues[0].getMessage());
301+
Assert.assertEquals("Invalid value \"148108-01-01T00:00:00.000000Z\" for type Timestamp64", issues[1].getMessage());
302+
}
303+
304+
private void date32datetime64timestamp64interval64Assert(LocalDate date32, LocalDateTime datetime64,
305+
Instant timestamp64, Duration interval64) {
306+
DataQueryResult reader = CTX.supplyResult(
307+
s -> s.executeDataQuery("" +
308+
"DECLARE $date32 AS date32;\n" +
309+
"DECLARE $datetime64 AS Datetime64;\n" +
310+
"DECLARE $timestamp64 AS Timestamp64;\n" +
311+
"DECLARE $interval64 AS Interval64;" +
312+
"SELECT $date32, $datetime64, $timestamp64, $interval64;",
313+
TxControl.serializableRw(),
314+
Params.of(
315+
"$date32", PrimitiveValue.newDate32(date32),
316+
"$datetime64", PrimitiveValue.newDatetime64(datetime64),
317+
"$timestamp64", PrimitiveValue.newTimestamp64(timestamp64),
318+
"$interval64", PrimitiveValue.newInterval64(interval64)
319+
)
320+
)).join().getValue();
321+
322+
ResultSetReader resultSetReader = reader.getResultSet(0);
323+
324+
Assert.assertTrue(resultSetReader.next());
325+
Assert.assertEquals(date32, resultSetReader.getColumn(0).getDate32());
326+
Assert.assertEquals(datetime64, resultSetReader.getColumn(1).getDatetime64());
327+
Assert.assertEquals(timestamp64, resultSetReader.getColumn(2).getTimestamp64());
328+
Assert.assertEquals(interval64, resultSetReader.getColumn(3).getInterval64());
329+
}
330+
331+
private void assertTimestamp64(ValueReader vr, Instant expected) {
332+
Assert.assertNotNull(vr);
333+
Assert.assertSame(PrimitiveType.Timestamp64, vr.getType());
334+
Assert.assertEquals(expected, vr.getTimestamp64());
335+
}
226336
}

0 commit comments

Comments
 (0)