diff --git a/jooq-dialect/src/main/java/org/jooq/impl/YdbListener.java b/jooq-dialect/src/main/java/org/jooq/impl/YdbListener.java index 5da4cda..8e448f1 100644 --- a/jooq-dialect/src/main/java/org/jooq/impl/YdbListener.java +++ b/jooq-dialect/src/main/java/org/jooq/impl/YdbListener.java @@ -38,6 +38,9 @@ public void visitEnd(VisitContext context) { private void addQuoteForName(VisitContext context) { QueryPart part = context.queryPart(); if (part instanceof Name) { + if (Name.Quoted.SYSTEM.equals(((Name) part).quoted())) { + return; + } RenderContext renderContext = context.renderContext(); if (renderContext != null) { renderContext.sql(quote); diff --git a/jooq-dialect/src/main/java/org/jooq/impl/YdbTableImpl.java b/jooq-dialect/src/main/java/org/jooq/impl/YdbTableImpl.java new file mode 100644 index 0000000..6d6f6ba --- /dev/null +++ b/jooq-dialect/src/main/java/org/jooq/impl/YdbTableImpl.java @@ -0,0 +1,26 @@ +package org.jooq.impl; + +import org.jooq.Comment; +import org.jooq.Condition; +import org.jooq.Field; +import org.jooq.Name; +import org.jooq.Record; +import org.jooq.Schema; +import org.jooq.Table; +import org.jooq.TableOptions; + +public class YdbTableImpl extends TableImpl { + private static final Name PRIMARY_KEY = new UnqualifiedName("PRIMARY KEY", Name.Quoted.SYSTEM); + + protected YdbTableImpl(Name alias, Table aliased, Field[] parameters, Condition where) { + super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table(), where); + } + + protected YdbTableImpl(Name name, Schema schema, Table aliased, Field[] parameters, Comment comment, TableOptions options, Condition where) { + super(name, schema, null, null, null, aliased, parameters, comment, options, where); + } + + public Table viewPrimaryKey() { + return new HintedTable<>(this, DSL.keyword("use primary key"), new QueryPartList<>(PRIMARY_KEY)); + } +} diff --git a/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbGeneratorStrategy.java b/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbGeneratorStrategy.java index e1af5c7..2437df3 100644 --- a/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbGeneratorStrategy.java +++ b/jooq-dialect/src/main/java/tech/ydb/jooq/codegen/YdbGeneratorStrategy.java @@ -1,7 +1,9 @@ package tech.ydb.jooq.codegen; import org.jooq.codegen.DefaultGeneratorStrategy; +import org.jooq.impl.YdbTableImpl; import org.jooq.meta.Definition; +import org.jooq.meta.TableDefinition; import org.jooq.tools.StringUtils; public class YdbGeneratorStrategy extends DefaultGeneratorStrategy { @@ -36,4 +38,12 @@ private static String getJavaClassName0(String outputName, Mode mode) { public String getJavaIdentifier(Definition definition) { return definition.getInputName().toUpperCase(getTargetLocale()); } + + @Override + public String getJavaClassExtends(Definition definition, Mode mode) { + if (definition instanceof TableDefinition && YdbGeneratorStrategy.Mode.DEFAULT.equals(mode)) { + return YdbTableImpl.class.getName(); + } + return super.getJavaClassExtends(definition, mode); + } } 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 0440d78..0e1a5cb 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 @@ -30,7 +30,7 @@ import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; -import org.jooq.impl.TableImpl; +import org.jooq.impl.YdbTableImpl; import org.jooq.types.ULong; import tech.ydb.jooq.binding.Date32Binding; @@ -48,7 +48,7 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes", "this-escape" }) -public class DateTable extends TableImpl { +public class DateTable extends YdbTableImpl { private static final long serialVersionUID = 1L; diff --git a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Episodes.java b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Episodes.java index fcfc762..3cf69e2 100644 --- a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Episodes.java +++ b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Episodes.java @@ -25,7 +25,7 @@ import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; -import org.jooq.impl.TableImpl; +import org.jooq.impl.YdbTableImpl; import org.jooq.types.ULong; import tech.ydb.jooq.binding.Uint64Binding; @@ -35,7 +35,7 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes", "this-escape" }) -public class Episodes extends TableImpl { +public class Episodes extends YdbTableImpl { private static final long serialVersionUID = 1L; 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 10c1c3b..460f9ae 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 @@ -27,7 +27,7 @@ import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; -import org.jooq.impl.TableImpl; +import org.jooq.impl.YdbTableImpl; import tech.ydb.jooq.binding.JsonBinding; import tech.ydb.jooq.binding.JsonDocumentBinding; @@ -40,7 +40,7 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes", "this-escape" }) -public class HardTable extends TableImpl { +public class HardTable extends YdbTableImpl { private static final long serialVersionUID = 1L; diff --git a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Seasons.java b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Seasons.java index 8a594c5..c6e6f5d 100644 --- a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Seasons.java +++ b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Seasons.java @@ -25,7 +25,7 @@ import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; -import org.jooq.impl.TableImpl; +import org.jooq.impl.YdbTableImpl; import org.jooq.types.ULong; import tech.ydb.jooq.binding.Uint64Binding; @@ -35,7 +35,7 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes", "this-escape" }) -public class Seasons extends TableImpl { +public class Seasons extends YdbTableImpl { private static final long serialVersionUID = 1L; diff --git a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Series.java b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Series.java index ea4974d..dc22df1 100644 --- a/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Series.java +++ b/jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Series.java @@ -25,7 +25,7 @@ import org.jooq.UniqueKey; import org.jooq.impl.DSL; import org.jooq.impl.SQLDataType; -import org.jooq.impl.TableImpl; +import org.jooq.impl.YdbTableImpl; import org.jooq.types.ULong; import tech.ydb.jooq.binding.Uint64Binding; @@ -35,7 +35,7 @@ * This class is generated by jOOQ. */ @SuppressWarnings({ "all", "unchecked", "rawtypes", "this-escape" }) -public class Series extends TableImpl { +public class Series extends YdbTableImpl { private static final long serialVersionUID = 1L; diff --git a/jooq-dialect/src/test/java/tech/ydb/jooq/SelectTest.java b/jooq-dialect/src/test/java/tech/ydb/jooq/SelectTest.java index b08d61a..17a8c3c 100644 --- a/jooq-dialect/src/test/java/tech/ydb/jooq/SelectTest.java +++ b/jooq-dialect/src/test/java/tech/ydb/jooq/SelectTest.java @@ -37,6 +37,15 @@ public void selectAllFrom() { assertEquals(List.of(FIRST, SECOND), series); } + @Test + public void selectAllFromUsingPrimaryKey() { + Result series = dsl + .selectFrom(SERIES.viewPrimaryKey()) + .fetch(); + + assertEquals(List.of(FIRST, SECOND), series); + } + @Test public void selectFromWhereText() { Result series = dsl