Skip to content

Commit

Permalink
HZN-457: upgrade Liquibase to version 3
Browse files Browse the repository at this point in the history
* Liquibase generic type `DATETIME` now creates TIMESTAMP WITHOUT TIME
  ZONE, rather than TIMESTAMP WITH TIME ZONE, so update all references
  in `changelog.xml` files and set `<validCheckSum/>` tags to make sure
  old (pre-this-patch) databases accept that they're OK.
* convert Migrator to use the `SpringLiquibase` class for doing
  resource-based loading
* port our liquibase plugins to the 3 API
  * the `createType` custom plugin was only used in one place and was
    creating problems; I switched it to be a normal <sql> tag
  * sub-tags are no longer supported by liquibase's extension parser,
    convert `setSequence` to take a single table + column + sequence
    and make multiple `setSequence` calls instead
  • Loading branch information
Benjamin Reed committed Feb 6, 2019
1 parent bc2379a commit a05defc
Show file tree
Hide file tree
Showing 66 changed files with 726 additions and 1,126 deletions.
27 changes: 27 additions & 0 deletions core/schema/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,17 @@
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
Expand Down Expand Up @@ -77,6 +88,22 @@
<version>${liquibaseVersion}</version>
<classifier>tests</classifier>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2011-2014 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2014 The OpenNMS Group, Inc.
* Copyright (C) 2011-2019 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2019 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
Expand Down Expand Up @@ -31,6 +31,9 @@
import java.util.ArrayList;
import java.util.List;

import liquibase.change.ChangeMetaData;
import liquibase.change.DatabaseChange;
import liquibase.change.DatabaseChangeNote;
import liquibase.change.core.AddAutoIncrementChange;
import liquibase.database.Database;
import liquibase.database.core.PostgresDatabase;
Expand All @@ -40,37 +43,43 @@
import liquibase.statement.core.CreateSequenceStatement;
import liquibase.statement.core.SetNullableStatement;

@DatabaseChange(name = "addAutoIncrement",
description = "Converts an existing column to be an auto-increment (a.k.a 'identity') column",
priority = ChangeMetaData.PRIORITY_DEFAULT + 1, appliesTo = "column",
databaseNotes = {@DatabaseChangeNote(
database = "sqlite", notes = "If the column type is not INTEGER it is converted to INTEGER"
)}
)
public class AddNamedAutoIncrementChange extends AddAutoIncrementChange {

private String m_sequenceName;

public AddNamedAutoIncrementChange() {
super();
setPriority(getChangeMetaData().getPriority() + 1);
public AddNamedAutoIncrementChange() {
super();
}

public String getSequenceName() {
return m_sequenceName;
return m_sequenceName;
}

public void setSequenceName(final String sequenceName) {
m_sequenceName = sequenceName;
m_sequenceName = sequenceName;
}

@Override
public SqlStatement[] generateStatements(final Database database) {
final List<SqlStatement> statements = new ArrayList<>();
final List<SqlStatement> statements = new ArrayList<>();
if (database instanceof PostgresDatabase) {
String sequenceName = m_sequenceName;
if (m_sequenceName == null) {
sequenceName = (getTableName() + "_" + getColumnName() + "_seq").toLowerCase();
statements.add(new CreateSequenceStatement(getSchemaName(), sequenceName));
}
statements.add(new SetNullableStatement(getSchemaName(), getTableName(), getColumnName(), null, false));
statements.add(new AddDefaultValueStatement(getSchemaName(), getTableName(), getColumnName(), getColumnDataType(), new DatabaseFunction("NEXTVAL('"+sequenceName+"')")));
return statements.toArray(new SqlStatement[0]);
String sequenceName = m_sequenceName;
if (m_sequenceName == null) {
sequenceName = (getTableName() + "_" + getColumnName() + "_seq").toLowerCase();
statements.add(new CreateSequenceStatement(getCatalogName(), getSchemaName(), sequenceName));
}
statements.add(new SetNullableStatement(getCatalogName(), getSchemaName(), getTableName(), getColumnName(), null, false));
statements.add(new AddDefaultValueStatement(getCatalogName(), getSchemaName(), getTableName(), getColumnName(), getColumnDataType(), new DatabaseFunction("NEXTVAL('"+sequenceName+"')")));
return statements.toArray(new SqlStatement[0]);
} else {
return super.generateStatements(database);
return super.generateStatements(database);
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2011-2014 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2014 The OpenNMS Group, Inc.
* Copyright (C) 2011-2019 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2019 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
Expand All @@ -28,41 +28,44 @@

package liquibase.ext.opennms.createindex;

import liquibase.change.ChangeMetaData;
import liquibase.change.DatabaseChange;
import liquibase.database.Database;
import liquibase.logging.LogFactory;
import liquibase.logging.LogService;
import liquibase.logging.Logger;
import liquibase.statement.SqlStatement;
import liquibase.statement.core.CreateIndexStatement;

@DatabaseChange(name="createIndex", description = "Creates an index on an existing column or set of columns.", priority = ChangeMetaData.PRIORITY_DEFAULT + 1, appliesTo = "index")
public class CreateIndexWithWhereChange extends liquibase.change.core.CreateIndexChange {
private static final Logger LOG = LogService.getLog(CreateIndexWithWhereChange.class);
private String m_where;

private String m_where;
public CreateIndexWithWhereChange() {
super();
}

public String getWhere() {
return m_where;
}

public void setWhere(final String where) {
m_where = where;
}

@Override
public SqlStatement[] generateStatements(final Database database) {
final SqlStatement[] superStatements = super.generateStatements(database);
if (m_where == null) return superStatements;

public CreateIndexWithWhereChange() {
super();
setPriority(getChangeMetaData().getPriority() + 1);
}
if (superStatements.length != 1) {
LOG.warning("expected 1 create index statement, but got " + superStatements.length);
return superStatements;
}

public String getWhere() {
return m_where;
}

public void setWhere(final String where) {
m_where = where;
}

@Override
public SqlStatement[] generateStatements(final Database database) {
final SqlStatement[] superStatements = super.generateStatements(database);
if (m_where == null) return superStatements;

if (superStatements.length != 1) {
LogFactory.getLogger().warning("expected 1 create index statement, but got " + superStatements.length);
return superStatements;
}

return new SqlStatement[]{
new CreateIndexWithWhereStatement((CreateIndexStatement)superStatements[0], m_where)
};
return new SqlStatement[]{
new CreateIndexWithWhereStatement((CreateIndexStatement)superStatements[0], m_where)
};
}

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2011-2014 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2014 The OpenNMS Group, Inc.
* Copyright (C) 2011-2019 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2019 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
Expand All @@ -29,38 +29,41 @@
package liquibase.ext.opennms.createindex;

import liquibase.database.Database;
import liquibase.database.structure.DatabaseObject;
import liquibase.logging.LogFactory;
import liquibase.logging.LogService;
import liquibase.logging.Logger;
import liquibase.sql.Sql;
import liquibase.sql.UnparsedSql;
import liquibase.sqlgenerator.SqlGeneratorChain;
import liquibase.sqlgenerator.core.CreateIndexGenerator;
import liquibase.statement.core.CreateIndexStatement;
import liquibase.structure.DatabaseObject;

public class CreateIndexWithWhereGenerator extends CreateIndexGenerator {
private static final Logger LOG = LogService.getLog(CreateIndexWithWhereGenerator.class);

@Override
public int getPriority() {
return super.getPriority() + 1;
}
@Override
public int getPriority() {
return super.getPriority() + 1;
}

@Override
@Override
@SuppressWarnings("rawtypes")
public Sql[] generateSql(final CreateIndexStatement statement, final Database database, final SqlGeneratorChain sqlGeneratorChain) {
final Sql[] superSql = super.generateSql(statement, database, sqlGeneratorChain);
final Sql[] superSql = super.generateSql(statement, database, sqlGeneratorChain);

if (statement instanceof CreateIndexWithWhereStatement) {
if (superSql.length != 1) {
LOG.warning("expected 1 create index statement, but got " + superSql.length);
return superSql;
}

if (statement instanceof CreateIndexWithWhereStatement) {
if (superSql.length != 1) {
LogFactory.getLogger().warning("expected 1 create index statement, but got " + superSql.length);
return superSql;
}

return new Sql[] {
new UnparsedSql(superSql[0].toSql() + " WHERE " + ((CreateIndexWithWhereStatement)statement).getWhere(),
superSql[0].getEndDelimiter(), superSql[0].getAffectedDatabaseObjects().toArray(new DatabaseObject[0]))
};
} else {
return superSql;
}
return new Sql[] {
new UnparsedSql(superSql[0].toSql() + " WHERE " + ((CreateIndexWithWhereStatement)statement).getWhere(),
superSql[0].getEndDelimiter(), superSql[0].getAffectedDatabaseObjects().toArray(new DatabaseObject[0]))
};
} else {
return superSql;
}
}

}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2011-2014 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2014 The OpenNMS Group, Inc.
* Copyright (C) 2011-2019 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2019 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
Expand All @@ -28,29 +28,29 @@

package liquibase.ext.opennms.createindex;

import liquibase.change.AddColumnConfig;
import liquibase.statement.SqlStatement;
import liquibase.statement.core.CreateIndexStatement;

public class CreateIndexWithWhereStatement extends CreateIndexStatement
implements SqlStatement {
public class CreateIndexWithWhereStatement extends CreateIndexStatement implements SqlStatement {

private String m_where;
private String m_where;

public CreateIndexWithWhereStatement(final String indexName, final String tableSchemaName, final String tableName, final Boolean isUnique, final String associatedWith, final String... columns) {
super(indexName, tableSchemaName, tableName, isUnique, associatedWith, columns);
}
public CreateIndexWithWhereStatement(final String indexName, final String tableCatalogName, final String tableSchemaName, final String tableName, final Boolean isUnique, final String associatedWith, final AddColumnConfig... columns) {
super(indexName, tableCatalogName, tableSchemaName, tableName, isUnique, associatedWith, columns);
}

public CreateIndexWithWhereStatement(final CreateIndexStatement statement, final String where) {
this(statement.getIndexName(), statement.getTableSchemaName(), statement.getTableName(), statement.isUnique(), statement.getAssociatedWith(), statement.getColumns());
m_where = where;
}
public CreateIndexWithWhereStatement(final CreateIndexStatement statement, final String where) {
this(statement.getIndexName(), statement.getTableCatalogName(), statement.getTableSchemaName(), statement.getTableName(), statement.isUnique(), statement.getAssociatedWith(), statement.getColumns());
m_where = where;
}

public String getWhere() {
return m_where;
}
public CreateIndexWithWhereStatement setWhere(final String where) {
m_where = where;
return this;
}
public String getWhere() {
return m_where;
}

public CreateIndexWithWhereStatement setWhere(final String where) {
m_where = where;
return this;
}
}
Loading

0 comments on commit a05defc

Please sign in to comment.