From db13cee6d3389d24abd301acb1e88ec22b3d3234 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 1 Apr 2020 12:59:18 +0200 Subject: [PATCH] [jOOQ/jOOQ#10023] Add Table.with(SQL) to allow for plain SQL templating in T-SQL style table hints --- jOOQ/src/main/java/org/jooq/Table.java | 103 ++++++++++++++++++ .../java/org/jooq/impl/AbstractTable.java | 17 +++ .../main/java/org/jooq/impl/WithTable.java | 102 +++++++++-------- 3 files changed, 174 insertions(+), 48 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/Table.java b/jOOQ/src/main/java/org/jooq/Table.java index adc2f5dbc8..a79844143e 100644 --- a/jOOQ/src/main/java/org/jooq/Table.java +++ b/jOOQ/src/main/java/org/jooq/Table.java @@ -2613,6 +2613,109 @@ public interface Table extends TableLike, Named { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java index fee2810d96..9e49c16a04 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java @@ -57,6 +57,7 @@ import static org.jooq.impl.DSL.exists; // ... import static org.jooq.impl.DSL.notExists; import static org.jooq.impl.DSL.selectFrom; +import static org.jooq.impl.DSL.sql; import static org.jooq.impl.DSL.table; import static org.jooq.impl.DSL.val; import static org.jooq.impl.Tools.EMPTY_FIELD; @@ -1012,6 +1013,22 @@ abstract class AbstractTable extends AbstractNamed implements + + + + + + + + + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/WithTable.java b/jOOQ/src/main/java/org/jooq/impl/WithTable.java index d89198aef4..2dbfe77f7e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/WithTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/WithTable.java @@ -37,63 +37,69 @@ */ package org.jooq.impl; -import static org.jooq.impl.Keywords.K_WITH; -import org.jooq.Context; -import org.jooq.Name; -import org.jooq.Record; -import org.jooq.Table; -/** - * @author Lukas Eder - */ -final class WithTable extends AbstractTable { - /** - * Generated UID - */ - private static final long serialVersionUID = -3905775637768497535L; - private final AbstractTable delegate; - private final String hint; - WithTable(AbstractTable delegate, String hint) { - super(delegate.getOptions(), delegate.getQualifiedName(), delegate.getSchema()); - this.delegate = delegate; - this.hint = hint; - } - @Override - public final boolean declaresTables() { - return true; - } - @Override - public final void accept(Context ctx) { - ctx.visit(delegate) - .sql(' ').visit(K_WITH) - .sql(" (").sql(hint) - .sql(')'); - } - @Override - public final Class getRecordType() { - return delegate.getRecordType(); - } - @Override - public final Table as(Name alias) { - return new WithTable<>(new TableAlias<>(delegate, alias), hint); - } - @Override - public final Table as(Name alias, Name... fieldAliases) { - return new WithTable<>(new TableAlias<>(delegate, alias, fieldAliases), hint); - } - @Override - final Fields fields0() { - return delegate.fields0(); - } -} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +