[jOOQ/jOOQ#13640] Add QOM.HintedTable

This commit is contained in:
Lukas Eder 2022-12-09 17:58:35 +01:00
parent a2c6a1a225
commit 42d7e21983
3 changed files with 55 additions and 5 deletions

View File

@ -58,7 +58,7 @@ abstract class AbstractDelegatingTable<R extends Record> extends AbstractTable<R
this.delegate = delegate;
}
abstract AbstractDelegatingTable<R> construct(AbstractTable<R> newDelegate);
abstract <O extends Record> AbstractDelegatingTable<O> construct(AbstractTable<O> newDelegate);
@Override
public final boolean declaresTables() {

View File

@ -40,13 +40,21 @@ package org.jooq.impl;
import org.jooq.Context;
import org.jooq.Keyword;
import org.jooq.Name;
import org.jooq.QueryPart;
import org.jooq.Record;
import org.jooq.impl.QOM.UNotYetImplemented;
// ...
import org.jooq.Table;
// ...
/**
* @author Lukas Eder
*/
final class HintedTable<R extends Record> extends AbstractDelegatingTable<R> implements UNotYetImplemented {
final class HintedTable<R extends Record>
extends
AbstractDelegatingTable<R>
implements
QOM.HintedTable<R>
{
private final Keyword keywords;
private final QueryPartList<Name> arguments;
@ -71,10 +79,14 @@ final class HintedTable<R extends Record> extends AbstractDelegatingTable<R> imp
}
@Override
final AbstractDelegatingTable<R> construct(AbstractTable<R> newDelegate) {
return new HintedTable<R>(newDelegate, keywords, arguments);
final <O extends Record> HintedTable<O> construct(AbstractTable<O> newDelegate) {
return new HintedTable<>(newDelegate, keywords, arguments);
}
// ------------------------------------------------------------------------
// XXX: QueryPart API
// ------------------------------------------------------------------------
@Override
public final void accept(Context<?> ctx) {
ctx.visit(delegate)
@ -82,4 +94,37 @@ final class HintedTable<R extends Record> extends AbstractDelegatingTable<R> imp
.sql(" (").visit(arguments)
.sql(')');
}
// -------------------------------------------------------------------------
// XXX: Query Object Model
// -------------------------------------------------------------------------
@Override
public final Table<R> $table() {
return delegate;
}
@Override
public final <O extends Record> HintedTable<O> $table(Table<O> newTable) {
return construct((AbstractTable<O>) newTable);
}
}

View File

@ -611,6 +611,11 @@ public final class QOM {
public interface HintedTable<R extends Record> extends Table<R> {
@NotNull Table<R> $table();
@NotNull <O extends Record> HintedTable<O> $table(Table<O> newTable);
}
public interface PrimaryKey extends Constraint {
@NotNull UnmodifiableList<? extends Field<?>> $fields();
}