Skip to content

Commit 4b3e641

Browse files
authored
"view primary key" hint (#196)
1 parent 34d5b2a commit 4b3e641

File tree

9 files changed

+58
-10
lines changed

9 files changed

+58
-10
lines changed

jooq-dialect/src/main/java/org/jooq/impl/YdbListener.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ public void visitEnd(VisitContext context) {
3838
private void addQuoteForName(VisitContext context) {
3939
QueryPart part = context.queryPart();
4040
if (part instanceof Name) {
41+
if (Name.Quoted.SYSTEM.equals(((Name) part).quoted())) {
42+
return;
43+
}
4144
RenderContext renderContext = context.renderContext();
4245
if (renderContext != null) {
4346
renderContext.sql(quote);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.jooq.impl;
2+
3+
import org.jooq.Comment;
4+
import org.jooq.Condition;
5+
import org.jooq.Field;
6+
import org.jooq.Name;
7+
import org.jooq.Record;
8+
import org.jooq.Schema;
9+
import org.jooq.Table;
10+
import org.jooq.TableOptions;
11+
12+
public class YdbTableImpl<R extends Record> extends TableImpl<R> {
13+
private static final Name PRIMARY_KEY = new UnqualifiedName("PRIMARY KEY", Name.Quoted.SYSTEM);
14+
15+
protected YdbTableImpl(Name alias, Table<R> aliased, Field<?>[] parameters, Condition where) {
16+
super(alias, null, aliased, parameters, DSL.comment(""), TableOptions.table(), where);
17+
}
18+
19+
protected YdbTableImpl(Name name, Schema schema, Table<R> aliased, Field<?>[] parameters, Comment comment, TableOptions options, Condition where) {
20+
super(name, schema, null, null, null, aliased, parameters, comment, options, where);
21+
}
22+
23+
public Table<R> viewPrimaryKey() {
24+
return new HintedTable<>(this, DSL.keyword("use primary key"), new QueryPartList<>(PRIMARY_KEY));
25+
}
26+
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package tech.ydb.jooq.codegen;
22

33
import org.jooq.codegen.DefaultGeneratorStrategy;
4+
import org.jooq.impl.YdbTableImpl;
45
import org.jooq.meta.Definition;
6+
import org.jooq.meta.TableDefinition;
57
import org.jooq.tools.StringUtils;
68

79
public class YdbGeneratorStrategy extends DefaultGeneratorStrategy {
@@ -36,4 +38,12 @@ private static String getJavaClassName0(String outputName, Mode mode) {
3638
public String getJavaIdentifier(Definition definition) {
3739
return definition.getInputName().toUpperCase(getTargetLocale());
3840
}
41+
42+
@Override
43+
public String getJavaClassExtends(Definition definition, Mode mode) {
44+
if (definition instanceof TableDefinition && YdbGeneratorStrategy.Mode.DEFAULT.equals(mode)) {
45+
return YdbTableImpl.class.getName();
46+
}
47+
return super.getJavaClassExtends(definition, mode);
48+
}
3949
}

jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/DateTable.java

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Episodes.java

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/HardTable.java

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Seasons.java

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jooq-dialect/src/test/java/jooq/generated/ydb/default_schema/tables/Series.java

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jooq-dialect/src/test/java/tech/ydb/jooq/SelectTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,15 @@ public void selectAllFrom() {
3737
assertEquals(List.of(FIRST, SECOND), series);
3838
}
3939

40+
@Test
41+
public void selectAllFromUsingPrimaryKey() {
42+
Result<SeriesRecord> series = dsl
43+
.selectFrom(SERIES.viewPrimaryKey())
44+
.fetch();
45+
46+
assertEquals(List.of(FIRST, SECOND), series);
47+
}
48+
4049
@Test
4150
public void selectFromWhereText() {
4251
Result<SeriesRecord> series = dsl

0 commit comments

Comments
 (0)