From eb33ce9cf729d778f425f7f944b55a2efd0a6dfd Mon Sep 17 00:00:00 2001 From: lukaseder Date: Tue, 16 May 2017 10:55:19 +0200 Subject: [PATCH] [#6222] Generate IDENTITY information on data type --- .../main/java/org/jooq/util/JavaGenerator.java | 17 +++++++---------- .../java/org/jooq/util/DataTypeDefinition.java | 5 +++++ .../org/jooq/util/DefaultColumnDefinition.java | 4 ++++ .../jooq/util/DefaultDataTypeDefinition.java | 11 +++++++++++ 4 files changed, 27 insertions(+), 10 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 b3f8c11d27..a1d378d356 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java @@ -5223,6 +5223,7 @@ public class JavaGenerator extends AbstractGenerator { 0, 0, true, + false, null, baseType ) + ".getArrayDataType()"; @@ -5236,6 +5237,7 @@ public class JavaGenerator extends AbstractGenerator { type.getScale(), type.getLength(), type.isNullable(), + type.isIdentity(), type.getDefaultValue(), type.getQualifiedUserType() ); @@ -5374,15 +5376,7 @@ public class JavaGenerator extends AbstractGenerator { return type; } - /** - * @deprecated - Use {@link #getTypeReference(Database, SchemaDefinition, String, int, int, int, boolean, String, Name)} instead. - */ - @Deprecated - protected String getTypeReference(Database db, SchemaDefinition schema, String t, int p, int s, int l, boolean n, String d, String u) { - return getTypeReference(db, schema, t, p, s, l, n, d, name(u)); - } - - protected String getTypeReference(Database db, SchemaDefinition schema, String t, int p, int s, int l, boolean n, String d, Name u) { + protected String getTypeReference(Database db, SchemaDefinition schema, String t, int p, int s, int l, boolean n, boolean i, String d, Name u) { StringBuilder sb = new StringBuilder(); if (db.getArray(schema, u) != null) { ArrayDefinition array = database.getArray(schema, u); @@ -5417,7 +5411,7 @@ public class JavaGenerator extends AbstractGenerator { DataType dataType = null; try { - dataType = mapJavaTimeTypes(DefaultDataType.getDataType(db.getDialect(), t, p, s)).nullable(n); + dataType = mapJavaTimeTypes(DefaultDataType.getDataType(db.getDialect(), t, p, s)).nullable(n).identity(i); if (d != null) dataType = dataType.defaultValue((Field) DSL.field(d, dataType)); @@ -5454,6 +5448,9 @@ public class JavaGenerator extends AbstractGenerator { if (!dataType.nullable()) sb.append(".nullable(false)"); + if (dataType.identity()) + sb.append(".identity(true)"); + // [#5291] Some dialects report valid SQL expresions (e.g. PostgreSQL), others // report actual values (e.g. MySQL). if (dataType.defaulted()) { diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DataTypeDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DataTypeDefinition.java index c46a404e11..b41f0977cf 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DataTypeDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DataTypeDefinition.java @@ -95,6 +95,11 @@ public interface DataTypeDefinition { */ boolean isNullable(); + /** + * Whether this data type is an identity. + */ + boolean isIdentity(); + /** * Whether this data type is defaultable. */ diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java index ebbc0847bf..3b3c71b8b2 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultColumnDefinition.java @@ -61,6 +61,10 @@ public class DefaultColumnDefinition this.position = position; this.isIdentity = isIdentity || isSyntheticIdentity(this); + + // [#6222] Copy the column's identity flag to the data type definition + if (type instanceof DefaultDataTypeDefinition) + ((DefaultDataTypeDefinition) type).identity(this.isIdentity); } private static boolean isSyntheticIdentity(DefaultColumnDefinition column) { diff --git a/jOOQ-meta/src/main/java/org/jooq/util/DefaultDataTypeDefinition.java b/jOOQ-meta/src/main/java/org/jooq/util/DefaultDataTypeDefinition.java index 3abefc292d..c6e5dc7afd 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/DefaultDataTypeDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/DefaultDataTypeDefinition.java @@ -64,6 +64,7 @@ public class DefaultDataTypeDefinition implements DataTypeDefinition { private final String converter; private final String binding; private final boolean nullable; + private boolean isIdentity; private final String defaultValue; private final int length; private final int precision; @@ -224,6 +225,16 @@ public class DefaultDataTypeDefinition implements DataTypeDefinition { return nullable; } + public final DefaultDataTypeDefinition identity(boolean identity) { + this.isIdentity = identity; + return this; + } + + @Override + public final boolean isIdentity() { + return isIdentity; + } + @Override public final boolean isDefaulted() { return getDefaultValue() != null;