diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractQualifiedRecord.java b/jOOQ/src/main/java/org/jooq/impl/AbstractQualifiedRecord.java index ab51f9a4a6..e775daf373 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractQualifiedRecord.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractQualifiedRecord.java @@ -37,6 +37,7 @@ */ package org.jooq.impl; +// ... import static org.jooq.impl.DefaultExecuteContext.localExecuteContext; import static org.jooq.impl.Tools.fieldsArray; import static org.jooq.impl.Tools.getMappedUDTName; @@ -52,6 +53,7 @@ import org.jooq.Field; import org.jooq.QualifiedRecord; import org.jooq.RecordQualifier; import org.jooq.Row; +import org.jooq.SQLDialect; import org.jooq.Scope; /** @@ -110,10 +112,22 @@ abstract class AbstractQualifiedRecord> extends Abs @Override public final String getSQLTypeName() throws SQLException { + ExecuteContext ctx = localExecuteContext(); // [#1693] This needs to return the fully qualified SQL type name, in // case the connected user is not the owner of the UDT - return getMappedUDTName(localExecuteContext(), this); + String result = getMappedUDTName(ctx, this); + + + + + + + + + + + return result; } @SuppressWarnings({ "rawtypes", "unchecked" }) diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java index 3e867e76f6..bbca411dd3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultBinding.java @@ -595,6 +595,18 @@ public class DefaultBinding implements Binding { if (QualifiedRecord.class.isAssignableFrom(type)) { Class> t = (Class>) type; result.put(getMappedUDTName(scope, t), t); + + + + + + + + + + + + for (Field field : getRecordQualifier(t).fields()) typeMap(field.getType(), scope, result); } @@ -3883,7 +3895,14 @@ public class DefaultBinding implements Binding { } static final class DefaultRecordBinding extends InternalBinding { - static final Set REQUIRE_RECORD_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB); + + + + + + + + static final Set REQUIRE_RECORD_CAST = SQLDialect.supportedBy(POSTGRES, YUGABYTEDB); DefaultRecordBinding(DataType dataType, Converter converter) { super(dataType, converter); diff --git a/jOOQ/src/main/java/org/jooq/impl/QualifiedRecordConstant.java b/jOOQ/src/main/java/org/jooq/impl/QualifiedRecordConstant.java index 76e29df972..540aa425b4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QualifiedRecordConstant.java +++ b/jOOQ/src/main/java/org/jooq/impl/QualifiedRecordConstant.java @@ -53,6 +53,7 @@ import org.jooq.RecordQualifier; import org.jooq.RenderContext; import org.jooq.conf.ParamType; import org.jooq.exception.SQLDialectNotSupportedException; +import org.jooq.impl.DefaultBinding.DefaultRecordBinding; import org.jooq.impl.QOM.UNotYetImplemented; /** @@ -115,6 +116,7 @@ final class QualifiedRecordConstant> extends Abstra + // Due to lack of UDT support in the Postgres JDBC drivers, all UDT's @@ -145,6 +147,7 @@ final class QualifiedRecordConstant> extends Abstra switch (c.family()) { + case POSTGRES: case YUGABYTEDB: c.visit(K_ROW); @@ -172,6 +175,9 @@ final class QualifiedRecordConstant> extends Abstra // [#13174] Need to cast inline UDT ROW expressions to the UDT type c -> c.visit(qualifier), () -> REQUIRE_RECORD_CAST.contains(ctx.dialect()) + + + ); }