diff --git a/jooq-dialect/pom.xml b/jooq-dialect/pom.xml
index 0e3b931..890f05d 100644
--- a/jooq-dialect/pom.xml
+++ b/jooq-dialect/pom.xml
@@ -4,7 +4,7 @@
tech.ydb.dialects
jooq-ydb-dialect
- 1.1.1
+ 1.2.0
YDB JOOQ Dialect module
YDB JOOQ Dialect module
@@ -53,7 +53,7 @@
3.19.0
2.3.8
- 2.3.7
+ 2.3.11
@@ -134,6 +134,7 @@
true
+ ydbplatform/local-ydb:trunk
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/YdbTypes.java b/jooq-dialect/src/main/java/tech/ydb/jooq/YdbTypes.java
index 1e295c5..4dd2d77 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/YdbTypes.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/YdbTypes.java
@@ -58,7 +58,12 @@ public static DataType DECIMAL(int precision, int scale) {
public static final DataType DATE = newDataType(SQLDataType.LOCALDATE, "date", new DateBinding());
public static final DataType DATETIME = newDataType(SQLDataType.LOCALDATETIME, "datetime", new DatetimeBinding());
public static final DataType TIMESTAMP = newDataType(SQLDataType.INSTANT, "timestamp", new TimestampBinding());
- public static final DataType INTERVAL = newDataType(SQLDataType.BIGINTUNSIGNED, "interval", new IntervalBinding());
+ public static final DataType INTERVAL = newDataType(SQLDataType.INTERVAL, "interval", new IntervalBinding());
+
+ public static final DataType DATE32 = newDataType(SQLDataType.LOCALDATE, "date32", new Date32Binding());
+ public static final DataType DATETIME64 = newDataType(SQLDataType.LOCALDATETIME, "datetime64", new Datetime64Binding());
+ public static final DataType TIMESTAMP64 = newDataType(SQLDataType.INSTANT, "timestamp64", new Timestamp64Binding());
+ public static final DataType INTERVAL64 = newDataType(SQLDataType.INTERVAL, "interval64", new Interval64Binding());
public static final DataType TZ_DATE = newDataType(SQLDataType.OTHER, "tzdate", new TzDateBinding());
public static final DataType TZ_DATETIME = newDataType(SQLDataType.OTHER, "tzdateTime", new TzDatetimeBinding());
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Date32Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Date32Binding.java
new file mode 100644
index 0000000..86e9a1a
--- /dev/null
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Date32Binding.java
@@ -0,0 +1,37 @@
+package tech.ydb.jooq.binding;
+
+import java.sql.SQLException;
+import java.time.LocalDate;
+import org.jooq.BindingGetResultSetContext;
+import org.jooq.BindingSetStatementContext;
+import org.jooq.Converter;
+import org.jooq.impl.AbstractBinding;
+import org.jooq.impl.IdentityConverter;
+import static tech.ydb.jooq.binding.BindingTools.indexType;
+import tech.ydb.table.values.PrimitiveType;
+import tech.ydb.table.values.PrimitiveValue;
+
+public final class Date32Binding extends AbstractBinding {
+
+ private static final int INDEX_TYPE = indexType(PrimitiveType.Date32);
+
+ @Override
+ public Converter converter() {
+ return new IdentityConverter<>(LocalDate.class);
+ }
+
+ @Override
+ public void set(BindingSetStatementContext ctx) throws SQLException {
+ if (ctx.value() == null) {
+ ctx.statement().setNull(ctx.index(), INDEX_TYPE);
+ } else {
+ ctx.statement().setObject(ctx.index(), PrimitiveValue.newDate32(ctx.value()), INDEX_TYPE);
+ }
+ }
+
+ @Override
+ public void get(BindingGetResultSetContext ctx) throws SQLException {
+ LocalDate value = (LocalDate) ctx.resultSet().getObject(ctx.index());
+ ctx.value(value);
+ }
+}
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/DateBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/DateBinding.java
index 571efe7..c8006ab 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/DateBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/DateBinding.java
@@ -13,7 +13,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class DateBinding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.Date);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Datetime64Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Datetime64Binding.java
new file mode 100644
index 0000000..db2f846
--- /dev/null
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Datetime64Binding.java
@@ -0,0 +1,37 @@
+package tech.ydb.jooq.binding;
+
+import java.sql.SQLException;
+import java.time.LocalDateTime;
+import org.jooq.BindingGetResultSetContext;
+import org.jooq.BindingSetStatementContext;
+import org.jooq.Converter;
+import org.jooq.impl.AbstractBinding;
+import org.jooq.impl.IdentityConverter;
+import static tech.ydb.jooq.binding.BindingTools.indexType;
+import tech.ydb.table.values.PrimitiveType;
+import tech.ydb.table.values.PrimitiveValue;
+
+public final class Datetime64Binding extends AbstractBinding {
+
+ private static final int INDEX_TYPE = indexType(PrimitiveType.Datetime64);
+
+ @Override
+ public Converter converter() {
+ return new IdentityConverter<>(LocalDateTime.class);
+ }
+
+ @Override
+ public void set(BindingSetStatementContext ctx) throws SQLException {
+ if (ctx.value() == null) {
+ ctx.statement().setNull(ctx.index(), INDEX_TYPE);
+ } else {
+ ctx.statement().setObject(ctx.index(), PrimitiveValue.newDatetime64(ctx.value()), INDEX_TYPE);
+ }
+ }
+
+ @Override
+ public void get(BindingGetResultSetContext ctx) throws SQLException {
+ LocalDateTime value = (LocalDateTime) ctx.resultSet().getObject(ctx.index());
+ ctx.value(value);
+ }
+}
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/DatetimeBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/DatetimeBinding.java
index 0860799..0360c14 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/DatetimeBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/DatetimeBinding.java
@@ -13,7 +13,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class DatetimeBinding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.Datetime);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java
new file mode 100644
index 0000000..e1000c7
--- /dev/null
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Interval64Binding.java
@@ -0,0 +1,65 @@
+package tech.ydb.jooq.binding;
+
+import java.sql.SQLException;
+import java.time.Duration;
+import java.time.temporal.ChronoUnit;
+import java.util.concurrent.TimeUnit;
+import org.jooq.BindingGetResultSetContext;
+import org.jooq.BindingSetStatementContext;
+import org.jooq.Converter;
+import org.jooq.impl.AbstractBinding;
+import org.jooq.types.ULong;
+import static tech.ydb.jooq.binding.BindingTools.indexType;
+import tech.ydb.table.values.PrimitiveType;
+import tech.ydb.table.values.PrimitiveValue;
+
+/**
+ * @author Kirill Kurdyukov
+ */
+public class Interval64Binding extends AbstractBinding {
+
+ private static final int INDEX_TYPE = indexType(PrimitiveType.Interval64);
+
+ @Override
+ public Converter converter() {
+ return new IntervalConverter();
+ }
+
+ @Override
+ public void set(BindingSetStatementContext ctx) throws SQLException {
+ if (ctx.value() == null) {
+ ctx.statement().setNull(ctx.index(), INDEX_TYPE);
+ } else {
+ ctx.statement().setObject(ctx.index(), PrimitiveValue.newInterval64(ctx.value()), INDEX_TYPE);
+ }
+ }
+
+ @Override
+ public void get(BindingGetResultSetContext ctx) throws SQLException {
+ Duration value = (Duration) ctx.resultSet().getObject(ctx.index());
+ ctx.value(value);
+ }
+
+ private static class IntervalConverter implements Converter {
+
+ @Override
+ public Duration from(ULong databaseObject) {
+ return Duration.of(databaseObject.longValue(), ChronoUnit.MICROS);
+ }
+
+ @Override
+ public ULong to(Duration userObject) {
+ return ULong.valueOf(TimeUnit.NANOSECONDS.toMicros(userObject.toNanos()));
+ }
+
+ @Override
+ public Class fromType() {
+ return ULong.class;
+ }
+
+ @Override
+ public Class toType() {
+ return Duration.class;
+ }
+ }
+}
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java
index d729c7a..a8345c6 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/IntervalBinding.java
@@ -11,7 +11,6 @@
import tech.ydb.table.values.PrimitiveType;
import tech.ydb.table.values.PrimitiveValue;
-@SuppressWarnings("resource")
public final class IntervalBinding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.Interval);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonBinding.java
index 92d14e3..6e652cf 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonBinding.java
@@ -13,7 +13,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class JsonBinding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.Json);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonDocumentBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonDocumentBinding.java
index 304e9ff..6c8c1e8 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonDocumentBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/JsonDocumentBinding.java
@@ -11,7 +11,6 @@
import tech.ydb.table.values.PrimitiveType;
import tech.ydb.table.values.PrimitiveValue;
-@SuppressWarnings("resource")
public final class JsonDocumentBinding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.JsonDocument);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Timestamp64Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Timestamp64Binding.java
new file mode 100644
index 0000000..31c72dc
--- /dev/null
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Timestamp64Binding.java
@@ -0,0 +1,40 @@
+package tech.ydb.jooq.binding;
+
+import java.sql.SQLException;
+import java.time.Instant;
+import org.jooq.BindingGetResultSetContext;
+import org.jooq.BindingSetStatementContext;
+import org.jooq.Converter;
+import org.jooq.impl.AbstractBinding;
+import org.jooq.impl.IdentityConverter;
+import static tech.ydb.jooq.binding.BindingTools.indexType;
+import tech.ydb.table.values.PrimitiveType;
+import tech.ydb.table.values.PrimitiveValue;
+
+/**
+ * @author Kirill Kurdyukov
+ */
+public class Timestamp64Binding extends AbstractBinding {
+
+ private static final int INDEX_TYPE = indexType(PrimitiveType.Timestamp64);
+
+ @Override
+ public Converter converter() {
+ return new IdentityConverter<>(Instant.class);
+ }
+
+ @Override
+ public void set(BindingSetStatementContext ctx) throws SQLException {
+ if (ctx.value() == null) {
+ ctx.statement().setNull(ctx.index(), INDEX_TYPE);
+ } else {
+ ctx.statement().setObject(ctx.index(), PrimitiveValue.newTimestamp64(ctx.value()), INDEX_TYPE);
+ }
+ }
+
+ @Override
+ public void get(BindingGetResultSetContext ctx) throws SQLException {
+ Instant value = (Instant) ctx.resultSet().getObject(ctx.index());
+ ctx.value(value);
+ }
+}
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java
index bc24bd4..a685f57 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TimestampBinding.java
@@ -12,7 +12,6 @@
import tech.ydb.table.values.PrimitiveType;
import tech.ydb.table.values.PrimitiveValue;
-@SuppressWarnings("resource")
public final class TimestampBinding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.Timestamp);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDateBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDateBinding.java
index eab70d5..2a040cc 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDateBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDateBinding.java
@@ -13,7 +13,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class TzDateBinding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.TzDate);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDatetimeBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDatetimeBinding.java
index 758b474..e9979c6 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDatetimeBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzDatetimeBinding.java
@@ -13,7 +13,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class TzDatetimeBinding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.TzDatetime);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzTimestampBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzTimestampBinding.java
index 263d582..cb1e629 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzTimestampBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/TzTimestampBinding.java
@@ -11,7 +11,6 @@
import tech.ydb.table.values.PrimitiveType;
import tech.ydb.table.values.PrimitiveValue;
-@SuppressWarnings("resource")
public final class TzTimestampBinding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.TzTimestamp);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint16Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint16Binding.java
index 86c3112..4b9d21f 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint16Binding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint16Binding.java
@@ -13,7 +13,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class Uint16Binding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.Uint16);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint32Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint32Binding.java
index d21fe2e..ee088b9 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint32Binding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint32Binding.java
@@ -13,7 +13,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class Uint32Binding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.Uint32);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint64Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint64Binding.java
index 8d73b6c..fcae9d0 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint64Binding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint64Binding.java
@@ -13,7 +13,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class Uint64Binding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.Uint64);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint8Binding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint8Binding.java
index 0efa01b..05d3f68 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint8Binding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/Uint8Binding.java
@@ -13,7 +13,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class Uint8Binding extends AbstractBinding {
private static final int INDEX_TYPE = indexType(PrimitiveType.Uint8);
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/YsonBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/YsonBinding.java
index 97acbee..bf90e04 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/YsonBinding.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/YsonBinding.java
@@ -12,7 +12,6 @@
import static tech.ydb.jooq.binding.BindingTools.indexType;
-@SuppressWarnings("resource")
public final class YsonBinding extends AbstractBinding