From 2abecfc90d7b770ee14459a25826f07f4d685dd4 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 28 Aug 2017 11:39:09 +0200 Subject: [PATCH] [#6532] Add UDT.isSynthetic() and UDTDefinition.isSynthetic() --- .../src/main/java/org/jooq/util/JavaGenerator.java | 5 +++-- .../java/org/jooq/util/AbstractUDTDefinition.java | 14 +++++++++++++- .../src/main/java/org/jooq/util/UDTDefinition.java | 5 +++++ jOOQ/src/main/java/org/jooq/UDT.java | 11 +++++++++++ jOOQ/src/main/java/org/jooq/impl/UDTImpl.java | 11 +++++++++++ 5 files changed, 43 insertions(+), 3 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java index a7ed42ddbf..5c013a5312 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -1838,6 +1838,7 @@ public class JavaGenerator extends AbstractGenerator { protected void generateUDT(UDTDefinition udt, JavaWriter out) { final SchemaDefinition schema = udt.getSchema(); final PackageDefinition pkg = udt.getPackage(); + final boolean synthetic = udt.isSynthetic(); final String className = getStrategy().getJavaClassName(udt); final String recordType = out.ref(getStrategy().getFullJavaClassName(udt, Mode.RECORD)); final List interfaces = out.ref(getStrategy().getJavaClassImplements(udt, Mode.DEFAULT)); @@ -1872,7 +1873,7 @@ public class JavaGenerator extends AbstractGenerator { } if (scala) { - out.println("class %s extends %s[%s](\"%s\", null[[before=, ][%s]])[[before= with ][separator= with ][%s]] {", className, UDTImpl.class, recordType, udt.getOutputName(), list(packageId), interfaces); + out.println("class %s extends %s[%s](\"%s\", null, %s, %s)[[before= with ][separator= with ][%s]] {", className, UDTImpl.class, recordType, udt.getOutputName(), packageId, synthetic, interfaces); } else { out.println("public class %s extends %s<%s>[[before= implements ][%s]] {", className, UDTImpl.class, recordType, interfaces); @@ -1936,7 +1937,7 @@ public class JavaGenerator extends AbstractGenerator { else { out.tab(1).javadoc(NO_FURTHER_INSTANCES_ALLOWED); out.tab(1).println("private %s() {", className); - out.tab(2).println("super(\"%s\", null[[before=, ][%s]]);", udt.getOutputName(), list(packageId)); + out.tab(2).println("super(\"%s\", null, %s, %s);", udt.getOutputName(), packageId, synthetic); out.tab(1).println("}"); } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/AbstractUDTDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/AbstractUDTDefinition.java index 0c7be677b2..77e7e27896 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/AbstractUDTDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/AbstractUDTDefinition.java @@ -49,13 +49,20 @@ implements UDTDefinition { private List routines; + private final boolean synthetic; public AbstractUDTDefinition(SchemaDefinition schema, String name, String comment) { - super(schema, null, name, comment); + this(schema, null, name, false, comment); } public AbstractUDTDefinition(SchemaDefinition schema, PackageDefinition pkg, String name, String comment) { + this(schema, pkg, name, false, comment); + } + + public AbstractUDTDefinition(SchemaDefinition schema, PackageDefinition pkg, String name, boolean synthetic, String comment) { super(schema, pkg, name, comment); + + this.synthetic = synthetic; } @Override @@ -88,4 +95,9 @@ implements public List getConstants() { return Collections.emptyList(); } + + @Override + public boolean isSynthetic() { + return synthetic; + } } diff --git a/jOOQ-meta/src/main/java/org/jooq/util/UDTDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/UDTDefinition.java index 265d0ae094..735dbfcb86 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/UDTDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/UDTDefinition.java @@ -72,4 +72,9 @@ public interface UDTDefinition extends PackageDefinition { */ @Override List getRoutines(); + + /** + * Whether this UDT is a synthetic type. + */ + boolean isSynthetic(); } diff --git a/jOOQ/src/main/java/org/jooq/UDT.java b/jOOQ/src/main/java/org/jooq/UDT.java index e93aecde53..6390c5b108 100644 --- a/jOOQ/src/main/java/org/jooq/UDT.java +++ b/jOOQ/src/main/java/org/jooq/UDT.java @@ -178,4 +178,15 @@ public interface UDT> extends QueryPart { * Whether this data type can be used from SQL statements. */ boolean isSQLUsable(); + + /** + * Whether this data type is a synthetic, structural UDT type. + *

+ * This is true for example: + *

    + *
  • For Oracle TAB%ROWTYPE references, which are synthetic + * PL/SQL RECORD types in PL/SQL.
  • + *
+ */ + boolean isSynthetic(); } diff --git a/jOOQ/src/main/java/org/jooq/impl/UDTImpl.java b/jOOQ/src/main/java/org/jooq/impl/UDTImpl.java index 779186a603..0ae991b0f8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UDTImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UDTImpl.java @@ -67,6 +67,7 @@ public class UDTImpl> extends AbstractQueryPart implement private final String name; private final Fields fields; private final Package pkg; + private final boolean synthetic; private transient DataType type; public UDTImpl(String name, Schema schema) { @@ -74,10 +75,15 @@ public class UDTImpl> extends AbstractQueryPart implement } public UDTImpl(String name, Schema schema, Package pkg) { + this(name, schema, pkg, false); + } + + public UDTImpl(String name, Schema schema, Package pkg, boolean synthetic) { this.fields = new Fields(); this.name = name; this.schema = schema; this.pkg = pkg; + this.synthetic = synthetic; } @Override @@ -176,6 +182,11 @@ public class UDTImpl> extends AbstractQueryPart implement return pkg == null; } + @Override + public final boolean isSynthetic() { + return synthetic; + } + @Override public final R newRecord() { return DSL.using(new DefaultConfiguration()).newRecord(this);