diff --git a/jooq-dialect/CHANGELOG.md b/jooq-dialect/CHANGELOG.md
index 4079b1e..6d96933 100644
--- a/jooq-dialect/CHANGELOG.md
+++ b/jooq-dialect/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.1.1 ##
+
+- Supported UUID YDB Type
+
## 1.1.0 ##
- Upgrade to new version of JDBC & SDK
diff --git a/jooq-dialect/pom.xml b/jooq-dialect/pom.xml
index edf91b3..d6f9b88 100644
--- a/jooq-dialect/pom.xml
+++ b/jooq-dialect/pom.xml
@@ -4,7 +4,7 @@
tech.ydb.dialects
jooq-ydb-dialect
- 1.1.0
+ 1.1.1
YDB JOOQ Dialect module
YDB JOOQ Dialect module
@@ -134,7 +134,6 @@
true
- cr.yandex/yc/yandex-docker-local-ydb:latest
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 8075ec6..1e295c5 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/YdbTypes.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/YdbTypes.java
@@ -52,7 +52,8 @@ public static DataType DECIMAL(int precision, int scale) {
public static final DataType JSON = newDataType(SQLDataType.JSON, "json", new JsonBinding());
public static final DataType JSONDOCUMENT = newDataType(SQLDataType.JSONB, "jsondocument", new JsonDocumentBinding());
public static final DataType YSON = newDataType(SQLDataType.OTHER, "yson", new YsonBinding());
- public static final DataType UUID = newDataType(SQLDataType.UUID, "uuid");
+
+ public static final DataType UUID = newDataType(SQLDataType.UUID, "uuid", new UuidBinding());
public static final DataType DATE = newDataType(SQLDataType.LOCALDATE, "date", new DateBinding());
public static final DataType DATETIME = newDataType(SQLDataType.LOCALDATETIME, "datetime", new DatetimeBinding());
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/binding/UuidBinding.java b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/UuidBinding.java
new file mode 100644
index 0000000..1295917
--- /dev/null
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/binding/UuidBinding.java
@@ -0,0 +1,38 @@
+package tech.ydb.jooq.binding;
+
+import java.sql.SQLException;
+import java.util.UUID;
+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;
+
+/**
+ * @author Kirill Kurdyukov
+ */
+public class UuidBinding extends AbstractBinding {
+
+ private static final int INDEX_TYPE = indexType(PrimitiveType.Uuid);
+
+ @Override
+ public Converter converter() {
+ return new IdentityConverter<>(UUID.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(), ctx.value(), INDEX_TYPE);
+ }
+ }
+
+ @Override
+ public void get(BindingGetResultSetContext ctx) throws SQLException {
+ ctx.value((UUID) ctx.resultSet().getObject(ctx.index()));
+ }
+}
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbDatabase.java b/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbDatabase.java
index 2282e02..d5c20f8 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbDatabase.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbDatabase.java
@@ -4,12 +4,28 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-
-import org.jooq.*;
+import org.jooq.DSLContext;
+import org.jooq.Record12;
+import org.jooq.Record4;
+import org.jooq.Record5;
+import org.jooq.Record6;
+import org.jooq.ResultQuery;
import org.jooq.impl.DSL;
-import org.jooq.meta.*;
-import org.jooq.tools.JooqLogger;
-
+import org.jooq.meta.AbstractDatabase;
+import org.jooq.meta.ArrayDefinition;
+import org.jooq.meta.CatalogDefinition;
+import org.jooq.meta.DefaultRelations;
+import org.jooq.meta.DomainDefinition;
+import org.jooq.meta.EnumDefinition;
+import org.jooq.meta.IndexDefinition;
+import org.jooq.meta.PackageDefinition;
+import org.jooq.meta.ResultQueryDatabase;
+import org.jooq.meta.RoutineDefinition;
+import org.jooq.meta.SchemaDefinition;
+import org.jooq.meta.SequenceDefinition;
+import org.jooq.meta.TableDefinition;
+import org.jooq.meta.UDTDefinition;
+import org.jooq.meta.XMLSchemaCollectionDefinition;
import tech.ydb.jdbc.YdbConnection;
import tech.ydb.jdbc.context.SchemeExecutor;
import tech.ydb.jdbc.context.YdbContext;
@@ -24,7 +40,6 @@
import tech.ydb.table.settings.DescribeTableSettings;
public class YdbDatabase extends AbstractDatabase implements ResultQueryDatabase {
- private static final JooqLogger log = JooqLogger.getLogger(YdbDatabase.class);
public YdbDatabase() {
YdbTypes.initialize();
diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbTableDefinition.java b/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbTableDefinition.java
index 026a611..67a366d 100644
--- a/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbTableDefinition.java
+++ b/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbTableDefinition.java
@@ -33,6 +33,7 @@
import tech.ydb.jooq.binding.Uint32Binding;
import tech.ydb.jooq.binding.Uint64Binding;
import tech.ydb.jooq.binding.Uint8Binding;
+import tech.ydb.jooq.binding.UuidBinding;
import tech.ydb.jooq.binding.YsonBinding;
import tech.ydb.jooq.value.YSON;
import tech.ydb.table.description.TableColumn;
@@ -73,7 +74,7 @@ protected List getElements0() {
kind = type.getKind();
}
- int decimalDigits = kind == Type.Kind.DECIMAL ? ((DecimalType) type).getPrecision(): 0;
+ int scale = kind == Type.Kind.DECIMAL ? ((DecimalType) type).getScale() : 0;
String typeName = type.toString();
Class extends Binding, ?>> binding = getBinding(typeName);
@@ -85,7 +86,7 @@ protected List getElements0() {
typeName,
YdbTypes.getSqlPrecision(type),
YdbTypes.getSqlPrecision(type),
- decimalDigits,
+ scale,
isNullable,
null,
DSL.name(typeName),
@@ -130,6 +131,7 @@ public TableDescription getTableDescription() {
case "Uint32" -> Uint32Binding.class;
case "Uint64" -> Uint64Binding.class;
case "Yson" -> YsonBinding.class;
+ case "Uuid" -> UuidBinding.class;
default -> null;
};
}
diff --git a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/DateTable.java b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/DateTable.java
index e646ff7..f5502ed 100644
--- a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/DateTable.java
+++ b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/DateTable.java
@@ -79,7 +79,7 @@ public Class getRecordType() {
/**
* The column DEFAULT_SCHEMA.date_table.big.
*/
- public final TableField BIG = createField(DSL.name("big"), SQLDataType.NUMERIC(16, 22), this, "");
+ public final TableField BIG = createField(DSL.name("big"), SQLDataType.NUMERIC(22, 9), this, "");
/**
* The column DEFAULT_SCHEMA.date_table.date.
diff --git a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/HardTable.java b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/HardTable.java
index 8b12bef..10c1c3b 100644
--- a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/HardTable.java
+++ b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/HardTable.java
@@ -31,6 +31,7 @@
import tech.ydb.jooq.binding.JsonBinding;
import tech.ydb.jooq.binding.JsonDocumentBinding;
+import tech.ydb.jooq.binding.UuidBinding;
import tech.ydb.jooq.binding.YsonBinding;
import tech.ydb.jooq.value.YSON;
@@ -76,6 +77,11 @@ public Class getRecordType() {
*/
public final TableField THIRD = createField(DSL.name("third"), SQLDataType.OTHER, this, "", new YsonBinding());
+ /**
+ * The column DEFAULT_SCHEMA.hard_table.uuid.
+ */
+ public final TableField UUID = createField(DSL.name("uuid"), SQLDataType.UUID, this, "", new UuidBinding());
+
private HardTable(Name alias, Table aliased) {
this(alias, aliased, (Field>[]) null, null);
}
diff --git a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/records/HardTableRecord.java b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/records/HardTableRecord.java
index 27e419e..a6ca370 100644
--- a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/records/HardTableRecord.java
+++ b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/records/HardTableRecord.java
@@ -4,6 +4,8 @@
package jooq.generated.ydb.default_schema.tables.records;
+import java.util.UUID;
+
import jooq.generated.ydb.default_schema.tables.HardTable;
import org.jooq.JSON;
@@ -78,6 +80,20 @@ public YSON getThird() {
return (YSON) get(3);
}
+ /**
+ * Setter for DEFAULT_SCHEMA.hard_table.uuid.
+ */
+ public void setUuid(UUID value) {
+ set(4, value);
+ }
+
+ /**
+ * Getter for DEFAULT_SCHEMA.hard_table.uuid.
+ */
+ public UUID getUuid() {
+ return (UUID) get(4);
+ }
+
// -------------------------------------------------------------------------
// Primary key information
// -------------------------------------------------------------------------
@@ -101,13 +117,14 @@ public HardTableRecord() {
/**
* Create a detached, initialised HardTableRecord
*/
- public HardTableRecord(byte[] id, JSON first, JSONB second, YSON third) {
+ public HardTableRecord(byte[] id, JSON first, JSONB second, YSON third, UUID uuid) {
super(HardTable.HARD_TABLE);
setId(id);
setFirst(first);
setSecond(second);
setThird(third);
+ setUuid(uuid);
resetChangedOnNotNull();
}
}
diff --git a/jooq-dialect/src/test/java/tech/ydb/jooq/BaseTest.java b/jooq-dialect/src/test/java/tech/ydb/jooq/BaseTest.java
index b1fbc99..7ae7049 100644
--- a/jooq-dialect/src/test/java/tech/ydb/jooq/BaseTest.java
+++ b/jooq-dialect/src/test/java/tech/ydb/jooq/BaseTest.java
@@ -98,6 +98,7 @@ public static void beforeAll() {
.column("first", YdbTypes.JSON)
.column("second", YdbTypes.JSONDOCUMENT)
.column("third", YdbTypes.YSON)
+ .column("uuid", YdbTypes.UUID)
.primaryKey("id")
.execute();
diff --git a/jooq-dialect/src/test/java/tech/ydb/jooq/InsertTest.java b/jooq-dialect/src/test/java/tech/ydb/jooq/InsertTest.java
index d399261..dcd1c2d 100644
--- a/jooq-dialect/src/test/java/tech/ydb/jooq/InsertTest.java
+++ b/jooq-dialect/src/test/java/tech/ydb/jooq/InsertTest.java
@@ -1,6 +1,7 @@
package tech.ydb.jooq;
import java.util.List;
+import java.util.UUID;
import static jooq.generated.ydb.default_schema.Tables.HARD_TABLE;
import static jooq.generated.ydb.default_schema.Tables.SERIES;
import jooq.generated.ydb.default_schema.tables.records.HardTableRecord;
@@ -71,10 +72,12 @@ public void testConditionalInsert() {
@Test
public void testInsertJsonTypes() {
HardTableRecord record = new HardTableRecord();
+
record.setId("test-id".getBytes());
record.setFirst(JSON.valueOf("{\"key\": \"value\"}"));
record.setSecond(JSONB.valueOf("{\"list\": [1, 2, 3]}"));
record.setThird(YSON.valueOf("{\"boolean\" = true}"));
+ record.setUuid(UUID.randomUUID());
dsl.insertInto(HARD_TABLE)
.set(record)
@@ -84,6 +87,11 @@ public void testInsertJsonTypes() {
.where(HARD_TABLE.ID.eq("test-id".getBytes()))
.fetch();
+ Result recordsByUuid = dsl.selectFrom(HARD_TABLE)
+ .where(HARD_TABLE.UUID.eq(record.getUuid()))
+ .fetch();
+
assertEquals(List.of(record), records);
+ assertEquals(List.of(record), recordsByUuid);
}
}