From c29a516c73c19c90a676790d486694d75e379818 Mon Sep 17 00:00:00 2001 From: Nathan Voxland Date: Fri, 14 Jan 2022 11:12:56 -0600 Subject: [PATCH] Use "GENERATED BY DEFAULT AS IDENTITY" for h2 2.0+ --- .../main/java/liquibase/database/core/H2Database.java | 10 +++++++++- .../sqlgenerator/core/CreateTableGeneratorTest.java | 6 +++--- .../addAutoIncrement/h2.sql | 2 +- .../statementexecute/AddAutoIncrementExecuteTest.java | 3 +-- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/liquibase-core/src/main/java/liquibase/database/core/H2Database.java b/liquibase-core/src/main/java/liquibase/database/core/H2Database.java index 35802bd8863..3d9ee5518ad 100644 --- a/liquibase-core/src/main/java/liquibase/database/core/H2Database.java +++ b/liquibase-core/src/main/java/liquibase/database/core/H2Database.java @@ -291,7 +291,15 @@ public boolean supportsInitiallyDeferrableColumns() { @Override protected String getAutoIncrementClause() { - return "AUTO_INCREMENT"; + try { + if (getDatabaseMajorVersion() == 1) { + return "AUTO_INCREMENT"; + } else { + return "GENERATED BY DEFAULT AS IDENTITY"; + } + } catch (DatabaseException e) { + return "AUTO_INCREMENT"; + } } @Override diff --git a/liquibase-core/src/test/java/liquibase/sqlgenerator/core/CreateTableGeneratorTest.java b/liquibase-core/src/test/java/liquibase/sqlgenerator/core/CreateTableGeneratorTest.java index bd08b4bcc36..d60ca4f9347 100644 --- a/liquibase-core/src/test/java/liquibase/sqlgenerator/core/CreateTableGeneratorTest.java +++ b/liquibase-core/src/test/java/liquibase/sqlgenerator/core/CreateTableGeneratorTest.java @@ -521,7 +521,7 @@ public void testAutoIncrementH2Database() throws Exception { Sql[] generatedSql = this.generatorUnderTest.generateSql(statement, database, null); - assertEquals("CREATE TABLE SCHEMA_NAME.TABLE_NAME (COLUMN1_NAME BIGINT AUTO_INCREMENT)", generatedSql[0].toSql()); + assertEquals("CREATE TABLE SCHEMA_NAME.TABLE_NAME (COLUMN1_NAME BIGINT GENERATED BY DEFAULT AS IDENTITY)", generatedSql[0].toSql()); } } } @@ -539,7 +539,7 @@ public void testAutoIncrementStartWithH2Database() throws Exception { Sql[] generatedSql = this.generatorUnderTest.generateSql(statement, database, null); - assertEquals("CREATE TABLE SCHEMA_NAME.TABLE_NAME (COLUMN1_NAME BIGINT AUTO_INCREMENT (0))", generatedSql[0].toSql()); + assertEquals("CREATE TABLE SCHEMA_NAME.TABLE_NAME (COLUMN1_NAME BIGINT GENERATED BY DEFAULT AS IDENTITY (0))", generatedSql[0].toSql()); } } } @@ -557,7 +557,7 @@ public void testAutoIncrementStartWithIncrementByH2Database() throws Exception { Sql[] generatedSql = this.generatorUnderTest.generateSql(statement, database, null); - assertEquals("CREATE TABLE SCHEMA_NAME.TABLE_NAME (COLUMN1_NAME BIGINT AUTO_INCREMENT (0, 10))", generatedSql[0].toSql()); + assertEquals("CREATE TABLE SCHEMA_NAME.TABLE_NAME (COLUMN1_NAME BIGINT GENERATED BY DEFAULT AS IDENTITY (0, 10))", generatedSql[0].toSql()); } } } diff --git a/liquibase-core/src/test/java/liquibase/verify/saved_state/compareGeneratedSqlWithExpectedSqlForMinimalChangesets/addAutoIncrement/h2.sql b/liquibase-core/src/test/java/liquibase/verify/saved_state/compareGeneratedSqlWithExpectedSqlForMinimalChangesets/addAutoIncrement/h2.sql index 91c643fdf50..d4a707de1b7 100644 --- a/liquibase-core/src/test/java/liquibase/verify/saved_state/compareGeneratedSqlWithExpectedSqlForMinimalChangesets/addAutoIncrement/h2.sql +++ b/liquibase-core/src/test/java/liquibase/verify/saved_state/compareGeneratedSqlWithExpectedSqlForMinimalChangesets/addAutoIncrement/h2.sql @@ -2,4 +2,4 @@ -- Change Parameter: columnDataType=int -- Change Parameter: columnName=id -- Change Parameter: tableName=person -ALTER TABLE person ALTER COLUMN id int AUTO_INCREMENT; +ALTER TABLE person ALTER COLUMN id int GENERATED BY DEFAULT AS IDENTITY; diff --git a/liquibase-integration-tests/src/test/java/liquibase/statementexecute/AddAutoIncrementExecuteTest.java b/liquibase-integration-tests/src/test/java/liquibase/statementexecute/AddAutoIncrementExecuteTest.java index 1dc002cb409..7414b403ed9 100644 --- a/liquibase-integration-tests/src/test/java/liquibase/statementexecute/AddAutoIncrementExecuteTest.java +++ b/liquibase-integration-tests/src/test/java/liquibase/statementexecute/AddAutoIncrementExecuteTest.java @@ -47,8 +47,7 @@ public void noSchema() throws Exception { assertCorrect("alter table [table_name] modify column_name integer generated by default as identity", PostgresDatabase.class, CockroachDatabase.class, EnterpriseDBDatabase.class); assertCorrect("alter table table_name modify column_name int auto_increment", MySQLDatabase.class); assertCorrect("ALTER TABLE [table_name] ALTER COLUMN [column_name] SET GENERATED BY DEFAULT AS IDENTITY", DB2Database.class); - assertCorrect("alter table table_name alter column column_name int generated by default as identity", HsqlDatabase.class); - assertCorrect("alter table table_name alter column column_name int auto_increment", H2Database.class); + assertCorrect("alter table table_name alter column column_name int generated by default as identity", HsqlDatabase.class, H2Database.class); assertCorrect("ALTER TABLE [table_name] MODIFY [column_name] serial", InformixDatabase.class); assertCorrect("ALTER TABLE [table_name] ALTER [column_name] SET DEFAULT AUTOINCREMENT", SybaseASADatabase.class);