From c367663df70cb3527de2c9535ecee4188489350e Mon Sep 17 00:00:00 2001 From: Knut Wannheden Date: Wed, 22 Jan 2020 16:02:36 +0100 Subject: [PATCH] [jOOQ/jOOQ#9200] Only use IS_IDENTITY if there are IDENTITY columns The jOOQ code generator will now only map `COLUMNS.IS_IDENTITY` to `ColumnDefinition#isIdentity()` if the table has a column for which `COLUMNS.IS_IDENTITY` is `YES`. Otherwise it will continue to check if the default value starts with `nextval`. --- .../meta/postgres/PostgresTableDefinition.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresTableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresTableDefinition.java index 4769b52aa6..1ff18d2fdf 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresTableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/postgres/PostgresTableDefinition.java @@ -84,6 +84,17 @@ public class PostgresTableDefinition extends AbstractTableDefinition { + // [#9200] only use IS_IDENTITY for ColumnDefinition#isIdentity() if + // table has a column with IS_IDENTITY = 'YES' + boolean hasIdentity = database.is10() ? + create().fetchExists(COLUMNS, + COLUMNS.TABLE_SCHEMA.equal(getSchema().getName()), + COLUMNS.TABLE_NAME.equal(getName()), + COLUMNS.IS_IDENTITY.eq(inline("YES")) + + ) + : false; + for (Record record : create().select( COLUMNS.COLUMN_NAME, COLUMNS.ORDINAL_POSITION, @@ -95,7 +106,7 @@ public class PostgresTableDefinition extends AbstractTableDefinition { when(COLUMNS.UDT_NAME.eq(inline("_varchar")), PG_ATTRIBUTE.ATTTYPMOD.sub(inline(4)))).as(COLUMNS.CHARACTER_MAXIMUM_LENGTH), COLUMNS.NUMERIC_PRECISION, COLUMNS.NUMERIC_SCALE, - (database.is10() ? COLUMNS.IS_IDENTITY : val(null, String.class)).as(COLUMNS.IS_IDENTITY), + (hasIdentity ? COLUMNS.IS_IDENTITY : val(null, String.class)).as(COLUMNS.IS_IDENTITY), COLUMNS.IS_NULLABLE, COLUMNS.COLUMN_DEFAULT, COLUMNS.UDT_SCHEMA, @@ -147,7 +158,7 @@ public class PostgresTableDefinition extends AbstractTableDefinition { record.get(COLUMNS.COLUMN_NAME), record.get(COLUMNS.ORDINAL_POSITION, int.class), type, - database.is10() ? record.get(COLUMNS.IS_IDENTITY, boolean.class) + hasIdentity ? record.get(COLUMNS.IS_IDENTITY, boolean.class) : defaultString(record.get(COLUMNS.COLUMN_DEFAULT)) .trim() .toLowerCase()