From 80f59e17ad5557b1921b503ddb27ca40e897ea90 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Fri, 8 Sep 2017 17:10:19 +0200 Subject: [PATCH] [#6072] Add code generation flag to configure whether generated Records should implement Record[N] --- .../java/org/jooq/util/AbstractGenerator.java | 11 +++++++ .../java/org/jooq/util/GenerationTool.java | 2 ++ .../main/java/org/jooq/util/Generator.java | 10 ++++++ .../java/org/jooq/util/JavaGenerator.java | 5 +-- .../java/org/jooq/util/jaxb/Generate.java | 31 +++++++++++++++++++ .../resources/xsd/jooq-codegen-3.10.0.xsd | 4 +++ 6 files changed, 61 insertions(+), 2 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java index f441921573..ff06e8c9aa 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java @@ -66,6 +66,7 @@ abstract class AbstractGenerator implements Generator { boolean generateUDTs = true; boolean generateTables = true; boolean generateRecords = true; + boolean generateRecordsImplementingRecordN = true; boolean generatePojos = false; boolean generatePojosEqualsAndHashCode = false; boolean generatePojosToString = true; @@ -315,6 +316,16 @@ abstract class AbstractGenerator implements Generator { this.generateRecords = generateRecords; } + @Override + public boolean generateRecordsImplementingRecordN() { + return generateRecords() && generateRecordsImplementingRecordN; + } + + @Override + public void setGenerateRecordsImplementingRecordN(boolean generateRecordsImplementingRecordN) { + this.generateRecordsImplementingRecordN = generateRecordsImplementingRecordN; + } + @Override public boolean generatePojos() { diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java index e84d1e47b9..f72abab5df 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java @@ -540,6 +540,8 @@ public class GenerationTool { generator.setGenerateTables(g.getGenerate().isTables()); if (g.getGenerate().isRecords() != null) generator.setGenerateRecords(g.getGenerate().isRecords()); + if (g.getGenerate().isRecordsImplementingRecordN() != null) + generator.setGenerateRecordsImplementingRecordN(g.getGenerate().isRecordsImplementingRecordN()); if (g.getGenerate().isPojos() != null) generator.setGeneratePojos(g.getGenerate().isPojos()); if (g.getGenerate().isImmutablePojos() != null) diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java index f9b0574c2f..84c2778bc1 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java @@ -184,6 +184,16 @@ public interface Generator { */ void setGenerateRecords(boolean generateRecords); + /** + * Whether TableRecords should be generated in addition to tables, which implement Record[N] types + */ + boolean generateRecordsImplementingRecordN(); + + /** + * Whether TableRecords should be generated in addition to tables, which implement Record[N] types + */ + void setGenerateRecordsImplementingRecordN(boolean generateRecordsImplementingRecordN); + /** * Whether POJO's should be generated in addition to records */ 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 75fe72a83f..e08ed104bd 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -1123,7 +1123,8 @@ public class JavaGenerator extends AbstractGenerator { String rowTypeRecord = null; // [#3130] Invalid UDTs may have a degree of 0 - if (degree > 0 && degree <= Constants.MAX_ROW_DEGREE) { + // [#6072] Generate these super types only if configured to do so + if (generateRecordsImplementingRecordN() && degree > 0 && degree <= Constants.MAX_ROW_DEGREE) { rowType = refRowType(out, columns); if (scala) @@ -1208,7 +1209,7 @@ public class JavaGenerator extends AbstractGenerator { } // [#3130] Invalid UDTs may have a degree of 0 - if (degree > 0 && degree <= Constants.MAX_ROW_DEGREE) { + if (generateRecordsImplementingRecordN() && degree > 0 && degree <= Constants.MAX_ROW_DEGREE) { out.tab(1).header("Record%s type implementation", degree); // fieldsRow() diff --git a/jOOQ-meta/src/main/java/org/jooq/util/jaxb/Generate.java b/jOOQ-meta/src/main/java/org/jooq/util/jaxb/Generate.java index 2b3c8d88f5..d093f69891 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/jaxb/Generate.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/jaxb/Generate.java @@ -60,6 +60,8 @@ public class Generate implements Serializable protected Boolean tables = true; @XmlElement(defaultValue = "true") protected Boolean records = true; + @XmlElement(defaultValue = "true") + protected Boolean recordsImplementingRecordN = true; @XmlElement(defaultValue = "false") protected Boolean pojos = false; @XmlElement(defaultValue = "false") @@ -430,6 +432,30 @@ public class Generate implements Serializable this.records = value; } + /** + * Generate TableRecord classes that implement Record[N] super types + * + * @return + * possible object is + * {@link Boolean } + * + */ + public Boolean isRecordsImplementingRecordN() { + return recordsImplementingRecordN; + } + + /** + * Sets the value of the recordsImplementingRecordN property. + * + * @param value + * allowed object is + * {@link Boolean } + * + */ + public void setRecordsImplementingRecordN(Boolean value) { + this.recordsImplementingRecordN = value; + } + /** * Generate POJOs. * @@ -1145,6 +1171,11 @@ public class Generate implements Serializable return this; } + public Generate withRecordsImplementingRecordN(Boolean value) { + setRecordsImplementingRecordN(value); + return this; + } + public Generate withPojos(Boolean value) { setPojos(value); return this; diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.10.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.10.0.xsd index 401d33890d..072d8a73bd 100644 --- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.10.0.xsd +++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.10.0.xsd @@ -876,6 +876,10 @@ jOOQ version used for source code]]> + + + +