From a29c8a22167b304d07870d95f8f1e46012dd4b7c Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 4 May 2023 18:14:00 +0200 Subject: [PATCH] [jOOQ/jOOQ#15020] Replacer and Traverse should recurse into TableField's Table reference --- .../java/org/jooq/impl/DeleteQueryImpl.java | 13 ---- .../java/org/jooq/impl/FieldMapForUpdate.java | 5 +- jOOQ/src/main/java/org/jooq/impl/Names.java | 1 + .../org/jooq/impl/OpaqueFieldDelegate.java | 65 +++++++++++++++++++ .../java/org/jooq/impl/TableFieldImpl.java | 20 +++++- 5 files changed, 86 insertions(+), 18 deletions(-) create mode 100644 jOOQ/src/main/java/org/jooq/impl/OpaqueFieldDelegate.java diff --git a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java index 8b5af64411..38b71fda11 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java @@ -301,19 +301,6 @@ implements - - - - - - - - - - - - - diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java index 449833a6c8..2560450b43 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapForUpdate.java @@ -108,6 +108,7 @@ import org.jooq.GeneratorStatementType; // ... import org.jooq.QueryPart; import org.jooq.RenderContext.CastMode; +// ... import org.jooq.Row; import org.jooq.SQLDialect; import org.jooq.Select; @@ -505,10 +506,6 @@ extends - - - - diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index d4885471a8..554bf83f5c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -202,6 +202,7 @@ final class Names { static final Name N_OBJECT_CONSTRUCT = systemName("object_construct"); static final Name N_OBJECT_CONSTRUCT_KEEP_NULL = systemName("object_construct_keep_null"); static final Name N_OFFSET = systemName("offset"); + static final Name N_OPAQUE = systemName("opaque"); static final Name N_OPENJSON = systemName("openjson"); static final Name N_OPENXML = systemName("openxml"); static final Name N_ORDINAL = systemName("ordinal"); diff --git a/jOOQ/src/main/java/org/jooq/impl/OpaqueFieldDelegate.java b/jOOQ/src/main/java/org/jooq/impl/OpaqueFieldDelegate.java new file mode 100644 index 0000000000..4138e6e2a6 --- /dev/null +++ b/jOOQ/src/main/java/org/jooq/impl/OpaqueFieldDelegate.java @@ -0,0 +1,65 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Other licenses: + * ----------------------------------------------------------------------------- + * Commercial licenses for this work are available. These replace the above + * ASL 2.0 and offer limited warranties, support, maintenance, and commercial + * database integrations. + * + * For more information, please visit: https://www.jooq.org/legal/licensing + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ +package org.jooq.impl; + +import static org.jooq.impl.Names.N_OPAQUE; + +import org.jooq.Context; +import org.jooq.FieldOrRowOrSelect; +import org.jooq.impl.QOM.UOpaque; + +/** + * [#15020] A {@link UOpaque} field delegate that prevents recursing too many times + * + * @author Lukas Eder + */ +final class OpaqueFieldDelegate extends CustomField { + + final FieldOrRowOrSelect delegate; + + OpaqueFieldDelegate(FieldOrRowOrSelect delegate) { + super(N_OPAQUE, SQLDataType.OTHER); + + this.delegate = delegate; + } + + @Override + public final void accept(Context ctx) { + ctx.visit(delegate); + } +} \ No newline at end of file diff --git a/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java index f253088ae1..b2868dd9d9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableFieldImpl.java @@ -86,7 +86,6 @@ extends implements TableField, SimpleQueryPart, - UNotYetImplemented, TypedReference, ScopeMappable { @@ -217,6 +216,25 @@ implements // XXX: Query Object Model // ------------------------------------------------------------------------- + + + + + + + + + + + + + + + + + + + // ------------------------------------------------------------------------ // XXX: Object API // ------------------------------------------------------------------------