Skip to content

Commit c1717ee

Browse files
feat JOOQ: Supported new types (#189)
1 parent 7795979 commit c1717ee

27 files changed

+357
-43
lines changed

jooq-dialect/pom.xml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>tech.ydb.dialects</groupId>
66
<artifactId>jooq-ydb-dialect</artifactId>
7-
<version>1.1.1</version>
7+
<version>1.2.0</version>
88

99
<name>YDB JOOQ Dialect module</name>
1010
<description>YDB JOOQ Dialect module</description>
@@ -53,7 +53,7 @@
5353
<jooq.version>3.19.0</jooq.version>
5454

5555
<ydb.sdk.version>2.3.8</ydb.sdk.version>
56-
<ydb.jdbc.version>2.3.7</ydb.jdbc.version>
56+
<ydb.jdbc.version>2.3.11</ydb.jdbc.version>
5757
</properties>
5858

5959
<dependencies>
@@ -134,6 +134,7 @@
134134
<configuration>
135135
<environmentVariables>
136136
<TESTCONTAINERS_REUSE_ENABLE>true</TESTCONTAINERS_REUSE_ENABLE>
137+
<YDB_DOCKER_IMAGE>ydbplatform/local-ydb:trunk</YDB_DOCKER_IMAGE>
137138
</environmentVariables>
138139
</configuration>
139140
</plugin>

jooq-dialect/src/main/java/tech/ydb/jooq/YdbTypes.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,12 @@ public static DataType<BigDecimal> DECIMAL(int precision, int scale) {
5858
public static final DataType<LocalDate> DATE = newDataType(SQLDataType.LOCALDATE, "date", new DateBinding());
5959
public static final DataType<LocalDateTime> DATETIME = newDataType(SQLDataType.LOCALDATETIME, "datetime", new DatetimeBinding());
6060
public static final DataType<Instant> TIMESTAMP = newDataType(SQLDataType.INSTANT, "timestamp", new TimestampBinding());
61-
public static final DataType<Duration> INTERVAL = newDataType(SQLDataType.BIGINTUNSIGNED, "interval", new IntervalBinding());
61+
public static final DataType<Duration> INTERVAL = newDataType(SQLDataType.INTERVAL, "interval", new IntervalBinding());
62+
63+
public static final DataType<LocalDate> DATE32 = newDataType(SQLDataType.LOCALDATE, "date32", new Date32Binding());
64+
public static final DataType<LocalDateTime> DATETIME64 = newDataType(SQLDataType.LOCALDATETIME, "datetime64", new Datetime64Binding());
65+
public static final DataType<Instant> TIMESTAMP64 = newDataType(SQLDataType.INSTANT, "timestamp64", new Timestamp64Binding());
66+
public static final DataType<Duration> INTERVAL64 = newDataType(SQLDataType.INTERVAL, "interval64", new Interval64Binding());
6267

6368
public static final DataType<ZonedDateTime> TZ_DATE = newDataType(SQLDataType.OTHER, "tzdate", new TzDateBinding());
6469
public static final DataType<ZonedDateTime> TZ_DATETIME = newDataType(SQLDataType.OTHER, "tzdateTime", new TzDatetimeBinding());
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package tech.ydb.jooq.binding;
2+
3+
import java.sql.SQLException;
4+
import java.time.LocalDate;
5+
import org.jooq.BindingGetResultSetContext;
6+
import org.jooq.BindingSetStatementContext;
7+
import org.jooq.Converter;
8+
import org.jooq.impl.AbstractBinding;
9+
import org.jooq.impl.IdentityConverter;
10+
import static tech.ydb.jooq.binding.BindingTools.indexType;
11+
import tech.ydb.table.values.PrimitiveType;
12+
import tech.ydb.table.values.PrimitiveValue;
13+
14+
public final class Date32Binding extends AbstractBinding<LocalDate, LocalDate> {
15+
16+
private static final int INDEX_TYPE = indexType(PrimitiveType.Date32);
17+
18+
@Override
19+
public Converter<LocalDate, LocalDate> converter() {
20+
return new IdentityConverter<>(LocalDate.class);
21+
}
22+
23+
@Override
24+
public void set(BindingSetStatementContext<LocalDate> ctx) throws SQLException {
25+
if (ctx.value() == null) {
26+
ctx.statement().setNull(ctx.index(), INDEX_TYPE);
27+
} else {
28+
ctx.statement().setObject(ctx.index(), PrimitiveValue.newDate32(ctx.value()), INDEX_TYPE);
29+
}
30+
}
31+
32+
@Override
33+
public void get(BindingGetResultSetContext<LocalDate> ctx) throws SQLException {
34+
LocalDate value = (LocalDate) ctx.resultSet().getObject(ctx.index());
35+
ctx.value(value);
36+
}
37+
}

jooq-dialect/src/main/java/tech/ydb/jooq/binding/DateBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static tech.ydb.jooq.binding.BindingTools.indexType;
1515

16-
@SuppressWarnings("resource")
1716
public final class DateBinding extends AbstractBinding<LocalDate, LocalDate> {
1817

1918
private static final int INDEX_TYPE = indexType(PrimitiveType.Date);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package tech.ydb.jooq.binding;
2+
3+
import java.sql.SQLException;
4+
import java.time.LocalDateTime;
5+
import org.jooq.BindingGetResultSetContext;
6+
import org.jooq.BindingSetStatementContext;
7+
import org.jooq.Converter;
8+
import org.jooq.impl.AbstractBinding;
9+
import org.jooq.impl.IdentityConverter;
10+
import static tech.ydb.jooq.binding.BindingTools.indexType;
11+
import tech.ydb.table.values.PrimitiveType;
12+
import tech.ydb.table.values.PrimitiveValue;
13+
14+
public final class Datetime64Binding extends AbstractBinding<LocalDateTime, LocalDateTime> {
15+
16+
private static final int INDEX_TYPE = indexType(PrimitiveType.Datetime64);
17+
18+
@Override
19+
public Converter<LocalDateTime, LocalDateTime> converter() {
20+
return new IdentityConverter<>(LocalDateTime.class);
21+
}
22+
23+
@Override
24+
public void set(BindingSetStatementContext<LocalDateTime> ctx) throws SQLException {
25+
if (ctx.value() == null) {
26+
ctx.statement().setNull(ctx.index(), INDEX_TYPE);
27+
} else {
28+
ctx.statement().setObject(ctx.index(), PrimitiveValue.newDatetime64(ctx.value()), INDEX_TYPE);
29+
}
30+
}
31+
32+
@Override
33+
public void get(BindingGetResultSetContext<LocalDateTime> ctx) throws SQLException {
34+
LocalDateTime value = (LocalDateTime) ctx.resultSet().getObject(ctx.index());
35+
ctx.value(value);
36+
}
37+
}

jooq-dialect/src/main/java/tech/ydb/jooq/binding/DatetimeBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static tech.ydb.jooq.binding.BindingTools.indexType;
1515

16-
@SuppressWarnings("resource")
1716
public final class DatetimeBinding extends AbstractBinding<LocalDateTime, LocalDateTime> {
1817

1918
private static final int INDEX_TYPE = indexType(PrimitiveType.Datetime);
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package tech.ydb.jooq.binding;
2+
3+
import java.sql.SQLException;
4+
import java.time.Duration;
5+
import java.time.temporal.ChronoUnit;
6+
import java.util.concurrent.TimeUnit;
7+
import org.jooq.BindingGetResultSetContext;
8+
import org.jooq.BindingSetStatementContext;
9+
import org.jooq.Converter;
10+
import org.jooq.impl.AbstractBinding;
11+
import org.jooq.types.ULong;
12+
import static tech.ydb.jooq.binding.BindingTools.indexType;
13+
import tech.ydb.table.values.PrimitiveType;
14+
import tech.ydb.table.values.PrimitiveValue;
15+
16+
/**
17+
* @author Kirill Kurdyukov
18+
*/
19+
public class Interval64Binding extends AbstractBinding<ULong, Duration> {
20+
21+
private static final int INDEX_TYPE = indexType(PrimitiveType.Interval64);
22+
23+
@Override
24+
public Converter<ULong, Duration> converter() {
25+
return new IntervalConverter();
26+
}
27+
28+
@Override
29+
public void set(BindingSetStatementContext<Duration> ctx) throws SQLException {
30+
if (ctx.value() == null) {
31+
ctx.statement().setNull(ctx.index(), INDEX_TYPE);
32+
} else {
33+
ctx.statement().setObject(ctx.index(), PrimitiveValue.newInterval64(ctx.value()), INDEX_TYPE);
34+
}
35+
}
36+
37+
@Override
38+
public void get(BindingGetResultSetContext<Duration> ctx) throws SQLException {
39+
Duration value = (Duration) ctx.resultSet().getObject(ctx.index());
40+
ctx.value(value);
41+
}
42+
43+
private static class IntervalConverter implements Converter<ULong, Duration> {
44+
45+
@Override
46+
public Duration from(ULong databaseObject) {
47+
return Duration.of(databaseObject.longValue(), ChronoUnit.MICROS);
48+
}
49+
50+
@Override
51+
public ULong to(Duration userObject) {
52+
return ULong.valueOf(TimeUnit.NANOSECONDS.toMicros(userObject.toNanos()));
53+
}
54+
55+
@Override
56+
public Class<ULong> fromType() {
57+
return ULong.class;
58+
}
59+
60+
@Override
61+
public Class<Duration> toType() {
62+
return Duration.class;
63+
}
64+
}
65+
}

jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import tech.ydb.table.values.PrimitiveType;
1212
import tech.ydb.table.values.PrimitiveValue;
1313

14-
@SuppressWarnings("resource")
1514
public final class IntervalBinding extends AbstractBinding<YearToSecond, Duration> {
1615

1716
private static final int INDEX_TYPE = indexType(PrimitiveType.Interval);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static tech.ydb.jooq.binding.BindingTools.indexType;
1515

16-
@SuppressWarnings("resource")
1716
public final class JsonBinding extends AbstractBinding<JSON, JSON> {
1817

1918
private static final int INDEX_TYPE = indexType(PrimitiveType.Json);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonDocumentBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import tech.ydb.table.values.PrimitiveType;
1212
import tech.ydb.table.values.PrimitiveValue;
1313

14-
@SuppressWarnings("resource")
1514
public final class JsonDocumentBinding extends AbstractBinding<JSONB, JSONB> {
1615

1716
private static final int INDEX_TYPE = indexType(PrimitiveType.JsonDocument);
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package tech.ydb.jooq.binding;
2+
3+
import java.sql.SQLException;
4+
import java.time.Instant;
5+
import org.jooq.BindingGetResultSetContext;
6+
import org.jooq.BindingSetStatementContext;
7+
import org.jooq.Converter;
8+
import org.jooq.impl.AbstractBinding;
9+
import org.jooq.impl.IdentityConverter;
10+
import static tech.ydb.jooq.binding.BindingTools.indexType;
11+
import tech.ydb.table.values.PrimitiveType;
12+
import tech.ydb.table.values.PrimitiveValue;
13+
14+
/**
15+
* @author Kirill Kurdyukov
16+
*/
17+
public class Timestamp64Binding extends AbstractBinding<Instant, Instant> {
18+
19+
private static final int INDEX_TYPE = indexType(PrimitiveType.Timestamp64);
20+
21+
@Override
22+
public Converter<Instant, Instant> converter() {
23+
return new IdentityConverter<>(Instant.class);
24+
}
25+
26+
@Override
27+
public void set(BindingSetStatementContext<Instant> ctx) throws SQLException {
28+
if (ctx.value() == null) {
29+
ctx.statement().setNull(ctx.index(), INDEX_TYPE);
30+
} else {
31+
ctx.statement().setObject(ctx.index(), PrimitiveValue.newTimestamp64(ctx.value()), INDEX_TYPE);
32+
}
33+
}
34+
35+
@Override
36+
public void get(BindingGetResultSetContext<Instant> ctx) throws SQLException {
37+
Instant value = (Instant) ctx.resultSet().getObject(ctx.index());
38+
ctx.value(value);
39+
}
40+
}

jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import tech.ydb.table.values.PrimitiveType;
1313
import tech.ydb.table.values.PrimitiveValue;
1414

15-
@SuppressWarnings("resource")
1615
public final class TimestampBinding extends AbstractBinding<LocalDateTime, Instant> {
1716

1817
private static final int INDEX_TYPE = indexType(PrimitiveType.Timestamp);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDateBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static tech.ydb.jooq.binding.BindingTools.indexType;
1515

16-
@SuppressWarnings("resource")
1716
public final class TzDateBinding extends AbstractBinding<ZonedDateTime, ZonedDateTime> {
1817

1918
private static final int INDEX_TYPE = indexType(PrimitiveType.TzDate);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDatetimeBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static tech.ydb.jooq.binding.BindingTools.indexType;
1515

16-
@SuppressWarnings("resource")
1716
public final class TzDatetimeBinding extends AbstractBinding<ZonedDateTime, ZonedDateTime> {
1817

1918
private static final int INDEX_TYPE = indexType(PrimitiveType.TzDatetime);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzTimestampBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import tech.ydb.table.values.PrimitiveType;
1212
import tech.ydb.table.values.PrimitiveValue;
1313

14-
@SuppressWarnings("resource")
1514
public final class TzTimestampBinding extends AbstractBinding<ZonedDateTime, ZonedDateTime> {
1615

1716
private static final int INDEX_TYPE = indexType(PrimitiveType.TzTimestamp);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint16Binding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static tech.ydb.jooq.binding.BindingTools.indexType;
1515

16-
@SuppressWarnings("resource")
1716
public final class Uint16Binding extends AbstractBinding<UShort, UShort> {
1817

1918
private static final int INDEX_TYPE = indexType(PrimitiveType.Uint16);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint32Binding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static tech.ydb.jooq.binding.BindingTools.indexType;
1515

16-
@SuppressWarnings("resource")
1716
public final class Uint32Binding extends AbstractBinding<UInteger, UInteger> {
1817

1918
private static final int INDEX_TYPE = indexType(PrimitiveType.Uint32);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint64Binding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static tech.ydb.jooq.binding.BindingTools.indexType;
1515

16-
@SuppressWarnings("resource")
1716
public final class Uint64Binding extends AbstractBinding<ULong, ULong> {
1817

1918
private static final int INDEX_TYPE = indexType(PrimitiveType.Uint64);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint8Binding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static tech.ydb.jooq.binding.BindingTools.indexType;
1515

16-
@SuppressWarnings("resource")
1716
public final class Uint8Binding extends AbstractBinding<UByte, UByte> {
1817

1918
private static final int INDEX_TYPE = indexType(PrimitiveType.Uint8);

jooq-dialect/src/main/java/tech/ydb/jooq/binding/YsonBinding.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
import static tech.ydb.jooq.binding.BindingTools.indexType;
1414

15-
@SuppressWarnings("resource")
1615
public final class YsonBinding extends AbstractBinding<Object, YSON> {
1716

1817
private static final int INDEX_TYPE = indexType(PrimitiveType.Yson);

jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbDatabase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ private TableDefinition getTableDefinition(String tableName, String dirPathFull,
163163
tableName,
164164
"",
165165
tableDescription,
166-
tablePath
166+
tablePath,
167+
getContext().getTypes()
167168
);
168169
}
169170

0 commit comments

Comments
 (0)