[#6332] [#6339] Recognise H2 system-generated sequences as identities

- [#6332] JPADatabase with GeneratedValue does not account for dialect
- [#6339] Recognise H2 SYSTEM_SEQUENCE in INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT as an Identity column
This commit is contained in:
lukaseder 2017-06-09 11:38:25 +02:00
parent 8a9acbaf41
commit 178e6216e5
7 changed files with 33 additions and 31 deletions

View File

@ -7,7 +7,7 @@ package org.jooq.example.jpa.jooq;
import javax.annotation.Generated;
import org.jooq.Index;
import org.jooq.SortField;
import org.jooq.OrderField;
import org.jooq.example.jpa.jooq.tables.Actor;
import org.jooq.example.jpa.jooq.tables.Film;
import org.jooq.example.jpa.jooq.tables.FilmActor;
@ -45,12 +45,12 @@ public class Indexes {
// -------------------------------------------------------------------------
private static class Indexes0 extends AbstractKeys {
public static Index PRIMARY_KEY_3 = createIndex("PRIMARY_KEY_3", Actor.ACTOR, new SortField[] { Actor.ACTOR.ACTORID.asc() }, true);
public static Index FKD2YJC1RU34H1SMWLA3FX7B6NX_INDEX_2 = createIndex("FKD2YJC1RU34H1SMWLA3FX7B6NX_INDEX_2", Film.FILM, new SortField[] { Film.FILM.LANGUAGE_LANGUAGEID.asc() }, false);
public static Index FKN2UB730RPO5B5E9X6U2LWL9FT_INDEX_2 = createIndex("FKN2UB730RPO5B5E9X6U2LWL9FT_INDEX_2", Film.FILM, new SortField[] { Film.FILM.ORIGINALLANGUAGE_LANGUAGEID.asc() }, false);
public static Index PRIMARY_KEY_2 = createIndex("PRIMARY_KEY_2", Film.FILM, new SortField[] { Film.FILM.FILMID.asc() }, true);
public static Index FK43SD2F45W7YN0GAXQ94EHTWT2_INDEX_7 = createIndex("FK43SD2F45W7YN0GAXQ94EHTWT2_INDEX_7", FilmActor.FILM_ACTOR, new SortField[] { FilmActor.FILM_ACTOR.ACTORS_ACTORID.asc() }, false);
public static Index PRIMARY_KEY_7 = createIndex("PRIMARY_KEY_7", FilmActor.FILM_ACTOR, new SortField[] { FilmActor.FILM_ACTOR.FILMS_FILMID.asc(), FilmActor.FILM_ACTOR.ACTORS_ACTORID.asc() }, true);
public static Index PRIMARY_KEY_C = createIndex("PRIMARY_KEY_C", Language.LANGUAGE, new SortField[] { Language.LANGUAGE.LANGUAGEID.asc() }, true);
public static Index PRIMARY_KEY_3 = createIndex("PRIMARY_KEY_3", Actor.ACTOR, new OrderField[] { Actor.ACTOR.ACTORID }, true);
public static Index FKD2YJC1RU34H1SMWLA3FX7B6NX_INDEX_2 = createIndex("FKD2YJC1RU34H1SMWLA3FX7B6NX_INDEX_2", Film.FILM, new OrderField[] { Film.FILM.LANGUAGE_LANGUAGEID }, false);
public static Index FKN2UB730RPO5B5E9X6U2LWL9FT_INDEX_2 = createIndex("FKN2UB730RPO5B5E9X6U2LWL9FT_INDEX_2", Film.FILM, new OrderField[] { Film.FILM.ORIGINALLANGUAGE_LANGUAGEID }, false);
public static Index PRIMARY_KEY_2 = createIndex("PRIMARY_KEY_2", Film.FILM, new OrderField[] { Film.FILM.FILMID }, true);
public static Index FK43SD2F45W7YN0GAXQ94EHTWT2_INDEX_7 = createIndex("FK43SD2F45W7YN0GAXQ94EHTWT2_INDEX_7", FilmActor.FILM_ACTOR, new OrderField[] { FilmActor.FILM_ACTOR.ACTORS_ACTORID }, false);
public static Index PRIMARY_KEY_7 = createIndex("PRIMARY_KEY_7", FilmActor.FILM_ACTOR, new OrderField[] { FilmActor.FILM_ACTOR.FILMS_FILMID, FilmActor.FILM_ACTOR.ACTORS_ACTORID }, true);
public static Index PRIMARY_KEY_C = createIndex("PRIMARY_KEY_C", Language.LANGUAGE, new OrderField[] { Language.LANGUAGE.LANGUAGEID }, true);
}
}

View File

@ -33,7 +33,7 @@ import org.jooq.impl.SchemaImpl;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Public extends SchemaImpl {
private static final long serialVersionUID = 2090254858;
private static final long serialVersionUID = -1420337279;
/**
* The reference instance of <code>PUBLIC</code>
@ -85,9 +85,9 @@ public class Public extends SchemaImpl {
private final List<Sequence<?>> getSequences0() {
return Arrays.<Sequence<?>>asList(
Sequences.SYSTEM_SEQUENCE_0B2F3736_FD28_4F70_9981_27E255E167DC,
Sequences.SYSTEM_SEQUENCE_19DC280A_2BA5_4C8D_BBEC_7914EB6BE5F5,
Sequences.SYSTEM_SEQUENCE_F2DB1AD8_3E0D_4C94_BBDF_9EB28539D8F0);
Sequences.SYSTEM_SEQUENCE_70BE46BF_63D1_4F2A_B1C0_A31847E2D3F6,
Sequences.SYSTEM_SEQUENCE_7C66F721_38BD_4793_86A9_FB9269960DA2,
Sequences.SYSTEM_SEQUENCE_CB0D4218_064F_45BC_B7EB_ACA8D001DEC2);
}
@Override

View File

@ -24,17 +24,17 @@ import org.jooq.impl.SequenceImpl;
public class Sequences {
/**
* The sequence <code>PUBLIC.SYSTEM_SEQUENCE_0B2F3736_FD28_4F70_9981_27E255E167DC</code>
* The sequence <code>PUBLIC.SYSTEM_SEQUENCE_70BE46BF_63D1_4F2A_B1C0_A31847E2D3F6</code>
*/
public static final Sequence<Long> SYSTEM_SEQUENCE_0B2F3736_FD28_4F70_9981_27E255E167DC = new SequenceImpl<Long>("SYSTEM_SEQUENCE_0B2F3736_FD28_4F70_9981_27E255E167DC", Public.PUBLIC, org.jooq.impl.SQLDataType.BIGINT);
public static final Sequence<Long> SYSTEM_SEQUENCE_70BE46BF_63D1_4F2A_B1C0_A31847E2D3F6 = new SequenceImpl<Long>("SYSTEM_SEQUENCE_70BE46BF_63D1_4F2A_B1C0_A31847E2D3F6", Public.PUBLIC, org.jooq.impl.SQLDataType.BIGINT);
/**
* The sequence <code>PUBLIC.SYSTEM_SEQUENCE_19DC280A_2BA5_4C8D_BBEC_7914EB6BE5F5</code>
* The sequence <code>PUBLIC.SYSTEM_SEQUENCE_7C66F721_38BD_4793_86A9_FB9269960DA2</code>
*/
public static final Sequence<Long> SYSTEM_SEQUENCE_19DC280A_2BA5_4C8D_BBEC_7914EB6BE5F5 = new SequenceImpl<Long>("SYSTEM_SEQUENCE_19DC280A_2BA5_4C8D_BBEC_7914EB6BE5F5", Public.PUBLIC, org.jooq.impl.SQLDataType.BIGINT);
public static final Sequence<Long> SYSTEM_SEQUENCE_7C66F721_38BD_4793_86A9_FB9269960DA2 = new SequenceImpl<Long>("SYSTEM_SEQUENCE_7C66F721_38BD_4793_86A9_FB9269960DA2", Public.PUBLIC, org.jooq.impl.SQLDataType.BIGINT);
/**
* The sequence <code>PUBLIC.SYSTEM_SEQUENCE_F2DB1AD8_3E0D_4C94_BBDF_9EB28539D8F0</code>
* The sequence <code>PUBLIC.SYSTEM_SEQUENCE_CB0D4218_064F_45BC_B7EB_ACA8D001DEC2</code>
*/
public static final Sequence<Long> SYSTEM_SEQUENCE_F2DB1AD8_3E0D_4C94_BBDF_9EB28539D8F0 = new SequenceImpl<Long>("SYSTEM_SEQUENCE_F2DB1AD8_3E0D_4C94_BBDF_9EB28539D8F0", Public.PUBLIC, org.jooq.impl.SQLDataType.BIGINT);
public static final Sequence<Long> SYSTEM_SEQUENCE_CB0D4218_064F_45BC_B7EB_ACA8D001DEC2 = new SequenceImpl<Long>("SYSTEM_SEQUENCE_CB0D4218_064F_45BC_B7EB_ACA8D001DEC2", Public.PUBLIC, org.jooq.impl.SQLDataType.BIGINT);
}

View File

@ -38,7 +38,7 @@ import org.jooq.impl.TableImpl;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Actor extends TableImpl<ActorRecord> {
private static final long serialVersionUID = 953917007;
private static final long serialVersionUID = -135380361;
/**
* The reference instance of <code>PUBLIC.ACTOR</code>
@ -56,7 +56,7 @@ public class Actor extends TableImpl<ActorRecord> {
/**
* The column <code>PUBLIC.ACTOR.ACTORID</code>.
*/
public final TableField<ActorRecord, Integer> ACTORID = createField("ACTORID", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaultValue(org.jooq.impl.DSL.field("(NEXT VALUE FOR PUBLIC.SYSTEM_SEQUENCE_F2DB1AD8_3E0D_4C94_BBDF_9EB28539D8F0)", org.jooq.impl.SQLDataType.INTEGER)), this, "");
public final TableField<ActorRecord, Integer> ACTORID = createField("ACTORID", org.jooq.impl.SQLDataType.INTEGER.nullable(false).identity(true), this, "");
/**
* The column <code>PUBLIC.ACTOR.FIRSTNAME</code>.

View File

@ -39,7 +39,7 @@ import org.jooq.impl.TableImpl;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Film extends TableImpl<FilmRecord> {
private static final long serialVersionUID = -1430753716;
private static final long serialVersionUID = 1608616621;
/**
* The reference instance of <code>PUBLIC.FILM</code>
@ -57,7 +57,7 @@ public class Film extends TableImpl<FilmRecord> {
/**
* The column <code>PUBLIC.FILM.FILMID</code>.
*/
public final TableField<FilmRecord, Integer> FILMID = createField("FILMID", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaultValue(org.jooq.impl.DSL.field("(NEXT VALUE FOR PUBLIC.SYSTEM_SEQUENCE_19DC280A_2BA5_4C8D_BBEC_7914EB6BE5F5)", org.jooq.impl.SQLDataType.INTEGER)), this, "");
public final TableField<FilmRecord, Integer> FILMID = createField("FILMID", org.jooq.impl.SQLDataType.INTEGER.nullable(false).identity(true), this, "");
/**
* The column <code>PUBLIC.FILM.LENGTH</code>.

View File

@ -38,7 +38,7 @@ import org.jooq.impl.TableImpl;
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public class Language extends TableImpl<LanguageRecord> {
private static final long serialVersionUID = -1952045324;
private static final long serialVersionUID = 1642663592;
/**
* The reference instance of <code>PUBLIC.LANGUAGE</code>
@ -56,7 +56,7 @@ public class Language extends TableImpl<LanguageRecord> {
/**
* The column <code>PUBLIC.LANGUAGE.LANGUAGEID</code>.
*/
public final TableField<LanguageRecord, Integer> LANGUAGEID = createField("LANGUAGEID", org.jooq.impl.SQLDataType.INTEGER.nullable(false).defaultValue(org.jooq.impl.DSL.field("(NEXT VALUE FOR PUBLIC.SYSTEM_SEQUENCE_0B2F3736_FD28_4F70_9981_27E255E167DC)", org.jooq.impl.SQLDataType.INTEGER)), this, "");
public final TableField<LanguageRecord, Integer> LANGUAGEID = createField("LANGUAGEID", org.jooq.impl.SQLDataType.INTEGER.nullable(false).identity(true), this, "");
/**
* The column <code>PUBLIC.LANGUAGE.NAME</code>.

View File

@ -83,6 +83,13 @@ public class H2TableDefinition extends AbstractTableDefinition {
.orderBy(Columns.ORDINAL_POSITION)
.fetch()) {
// [#5331] AUTO_INCREMENT (MySQL style)
// [#5331] DEFAULT nextval('sequence') (PostgreSQL style)
// [#6332] [#6339] system-generated defaults shouldn't produce a default clause
boolean isIdentity =
null != record.get(Columns.SEQUENCE_NAME)
|| defaultString(record.get(Columns.COLUMN_DEFAULT)).trim().toLowerCase().startsWith("nextval");
DataTypeDefinition type = new DefaultDataTypeDefinition(
getDatabase(),
getSchema(),
@ -91,19 +98,14 @@ public class H2TableDefinition extends AbstractTableDefinition {
record.get(Columns.NUMERIC_PRECISION),
record.get(Columns.NUMERIC_SCALE),
record.get(Columns.IS_NULLABLE, boolean.class),
record.get(Columns.COLUMN_DEFAULT));
isIdentity ? null : record.get(Columns.COLUMN_DEFAULT));
ColumnDefinition column = new DefaultColumnDefinition(
getDatabase().getTable(getSchema(), getName()),
record.get(Columns.COLUMN_NAME),
record.get(Columns.ORDINAL_POSITION),
type,
// [#5331] AUTO_INCREMENT (MySQL style)
null != record.get(Columns.SEQUENCE_NAME)
// [#5331] DEFAULT nextval('sequence') (PostgreSQL style)
|| defaultString(record.get(Columns.COLUMN_DEFAULT)).trim().toLowerCase().startsWith("nextval"),
isIdentity,
record.get(Columns.REMARKS));
result.add(column);