[Fix] Fixed migration scripts and added missing states in DB
This commit is contained in:
parent
c835ef2735
commit
476bd0f728
|
@ -190,7 +190,7 @@ public class PostgreSqlActivityDao extends PostgresqlDao<Activity> implements Ac
|
||||||
}
|
}
|
||||||
|
|
||||||
String sql = "update " + getTableName()
|
String sql = "update " + getTableName()
|
||||||
+ " set created_by = ?, created_at = ?, deleted = ?, latest = ?, name = ?, type = ?, state = ?, asxml = ? where id = ? and version = ?";
|
+ " set created_by = ?, created_at = ?, deleted = ?, latest = ?, name = ?, type = ?, state = ?::order_state, asxml = ? where id = ? and version = ?";
|
||||||
|
|
||||||
try (PreparedStatement preparedStatement = tx().getConnection().prepareStatement(sql)) {
|
try (PreparedStatement preparedStatement = tx().getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
-- AUDITS
|
||||||
|
CREATE TYPE access_type AS ENUM ('READ', 'CREATE', 'UPDATE', 'DELETE');
|
||||||
|
CREATE TABLE IF NOT EXISTS audits (
|
||||||
|
id bigint PRIMARY KEY,
|
||||||
|
username VARCHAR(255) NOT NULL,
|
||||||
|
firstname VARCHAR(255) NOT NULL,
|
||||||
|
lastname VARCHAR(255) NOT NULL,
|
||||||
|
date timestamp with time zone NOT NULL,
|
||||||
|
|
||||||
|
element_type VARCHAR(255) NOT NULL,
|
||||||
|
element_accessed VARCHAR(255) NOT NULL,
|
||||||
|
new_version timestamp with time zone,
|
||||||
|
|
||||||
|
action VARCHAR(255) NOT NULL,
|
||||||
|
access_type access_type NOT NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
-- set version
|
||||||
|
INSERT INTO db_version
|
||||||
|
(version, description, created)
|
||||||
|
values(
|
||||||
|
'0.2.0',
|
||||||
|
'Added new table for audits',
|
||||||
|
CURRENT_TIMESTAMP
|
||||||
|
);
|
|
@ -24,7 +24,8 @@ CREATE TABLE IF NOT EXISTS resources (
|
||||||
);
|
);
|
||||||
|
|
||||||
-- ORDERS
|
-- ORDERS
|
||||||
CREATE TYPE order_state AS ENUM ('CREATED', 'OPEN', 'EXECUTION', 'CLOSED');
|
CREATE TYPE order_state AS ENUM ('CREATED', 'PLANNING', 'PLANNED', 'EXECUTION', 'STOPPED', 'WARNING', 'ERROR', 'EXECUTED', 'CLOSED');
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS orders (
|
CREATE TABLE IF NOT EXISTS orders (
|
||||||
id varchar(255) not null,
|
id varchar(255) not null,
|
||||||
|
@ -136,6 +137,6 @@ INSERT INTO db_version
|
||||||
values(
|
values(
|
||||||
'0.5.1',
|
'0.5.1',
|
||||||
'strolch',
|
'strolch',
|
||||||
'Added state column to activity',
|
'Added state column to activity, and added new states',
|
||||||
CURRENT_TIMESTAMP
|
CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,5 +1,15 @@
|
||||||
|
|
||||||
-- add version columns
|
CREATE TYPE order_state1 AS ENUM ('CREATED', 'PLANNING', 'PLANNED', 'EXECUTION', 'STOPPED', 'WARNING', 'ERROR', 'EXECUTED', 'CLOSED');
|
||||||
|
|
||||||
|
-- Convert to new type, casting via text representation
|
||||||
|
ALTER TABLE orders
|
||||||
|
ALTER COLUMN state TYPE order_state1
|
||||||
|
USING (state::text::order_state1);
|
||||||
|
|
||||||
|
DROP TYPE order_state;
|
||||||
|
ALTER TYPE order_state1 RENAME TO order_state;
|
||||||
|
|
||||||
|
-- add state columns
|
||||||
ALTER TABLE activities ADD COLUMN state order_state;
|
ALTER TABLE activities ADD COLUMN state order_state;
|
||||||
|
|
||||||
INSERT INTO db_version
|
INSERT INTO db_version
|
||||||
|
@ -7,6 +17,6 @@ INSERT INTO db_version
|
||||||
values(
|
values(
|
||||||
'0.5.1',
|
'0.5.1',
|
||||||
'strolch',
|
'strolch',
|
||||||
'Added state column to activity',
|
'Added state column to activity, and added new states',
|
||||||
CURRENT_TIMESTAMP
|
CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
|
@ -20,10 +20,17 @@ import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.DB_URL;
|
||||||
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.DB_USERNAME;
|
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.DB_USERNAME;
|
||||||
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.dropSchema;
|
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.dropSchema;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import li.strolch.db.DbException;
|
import li.strolch.db.DbException;
|
||||||
import li.strolch.db.DbSchemaVersionCheck;
|
import li.strolch.db.DbSchemaVersionCheck;
|
||||||
|
@ -31,40 +38,78 @@ import li.strolch.persistence.postgresql.PostgreSqlPersistenceHandler;
|
||||||
import li.strolch.runtime.StrolchConstants;
|
import li.strolch.runtime.StrolchConstants;
|
||||||
import li.strolch.utils.Version;
|
import li.strolch.utils.Version;
|
||||||
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
*/
|
*/
|
||||||
public class DbMigrationTest {
|
public class DbMigrationTest {
|
||||||
|
|
||||||
@BeforeClass
|
private static final Logger logger = LoggerFactory.getLogger(DbMigrationTest.class);
|
||||||
public static void beforeClass() throws Exception {
|
|
||||||
|
@Before
|
||||||
|
public void before() throws Exception {
|
||||||
dropSchema(DB_URL, DB_USERNAME, DB_PASSWORD);
|
dropSchema(DB_URL, DB_USERNAME, DB_PASSWORD);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldCreate() throws Exception {
|
||||||
|
|
||||||
|
DbSchemaVersionCheck dbCheck = new DbSchemaVersionCheck(PostgreSqlPersistenceHandler.SCRIPT_PREFIX,
|
||||||
|
PostgreSqlPersistenceHandler.class, true, true, true);
|
||||||
|
|
||||||
|
try (Connection con = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD)) {
|
||||||
|
|
||||||
|
// CREATE 0.1.0
|
||||||
|
dbCheck.createSchema(con, StrolchConstants.DEFAULT_REALM, Version.valueOf("0.1.0"));
|
||||||
|
|
||||||
|
File scriptsD = new File("src/main/resources");
|
||||||
|
File[] scriptFiles = scriptsD.listFiles(f -> f.getName().endsWith("_initial.sql"));
|
||||||
|
Arrays.sort(scriptFiles, (f1, f2) -> f1.getName().compareTo(f2.getName()));
|
||||||
|
for (File scriptFile : scriptFiles) {
|
||||||
|
|
||||||
|
String name = scriptFile.getName();
|
||||||
|
String versionS = name.substring("strolch_db_schema_".length(),
|
||||||
|
name.length() - "_initial.sql".length());
|
||||||
|
Version version = Version.valueOf(versionS);
|
||||||
|
logger.info("Creating Version " + version);
|
||||||
|
|
||||||
|
dropSchema(DB_URL, DB_USERNAME, DB_PASSWORD);
|
||||||
|
|
||||||
|
// CREATE
|
||||||
|
dbCheck.createSchema(con, StrolchConstants.DEFAULT_REALM, version);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (SQLException e) {
|
||||||
|
String msg = "Failed to open DB connection to URL {0} due to: {1}"; //$NON-NLS-1$
|
||||||
|
msg = MessageFormat.format(msg, DB_URL, e.getMessage());
|
||||||
|
throw new DbException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldMigrate() throws Exception {
|
public void shouldMigrate() throws Exception {
|
||||||
|
|
||||||
String scriptPrefix = PostgreSqlPersistenceHandler.SCRIPT_PREFIX;
|
DbSchemaVersionCheck dbCheck = new DbSchemaVersionCheck(PostgreSqlPersistenceHandler.SCRIPT_PREFIX,
|
||||||
Class<?> ctxClass = PostgreSqlPersistenceHandler.class;
|
PostgreSqlPersistenceHandler.class, true, true, true);
|
||||||
boolean allowSchemaCreation = true;
|
|
||||||
boolean allowSchemaMigration = true;
|
|
||||||
boolean allowSchemaDrop = true;
|
|
||||||
DbSchemaVersionCheck dbCheck = new DbSchemaVersionCheck(scriptPrefix, ctxClass, allowSchemaCreation,
|
|
||||||
allowSchemaMigration, allowSchemaDrop);
|
|
||||||
|
|
||||||
try (Connection con = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD)) {
|
try (Connection con = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD)) {
|
||||||
|
|
||||||
// DROP 0.2.1
|
// CREATE 0.1.0
|
||||||
dbCheck.dropSchema(con, StrolchConstants.DEFAULT_REALM, Version.valueOf("0.2.1"));
|
dbCheck.createSchema(con, StrolchConstants.DEFAULT_REALM, Version.valueOf("0.1.0"));
|
||||||
|
|
||||||
// CREATE 0.2.0
|
File scriptsD = new File("src/main/resources");
|
||||||
dbCheck.createSchema(con, StrolchConstants.DEFAULT_REALM, Version.valueOf("0.2.0"));
|
File[] scriptFiles = scriptsD.listFiles(f -> f.getName().endsWith("_migration.sql"));
|
||||||
|
Arrays.sort(scriptFiles, (f1, f2) -> f1.getName().compareTo(f2.getName()));
|
||||||
|
for (File scriptFile : scriptFiles) {
|
||||||
|
|
||||||
// MIGRATE 0.2.1
|
String name = scriptFile.getName();
|
||||||
dbCheck.migrateSchema(con, StrolchConstants.DEFAULT_REALM, Version.valueOf("0.2.1"));
|
String versionS = name.substring("strolch_db_schema_".length(),
|
||||||
|
name.length() - "_migration.sql".length());
|
||||||
|
Version version = Version.valueOf(versionS);
|
||||||
|
logger.info("Migrating Version " + version);
|
||||||
|
|
||||||
|
// MIGRATE
|
||||||
|
dbCheck.migrateSchema(con, StrolchConstants.DEFAULT_REALM, version);
|
||||||
|
}
|
||||||
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
String msg = "Failed to open DB connection to URL {0} due to: {1}"; //$NON-NLS-1$
|
String msg = "Failed to open DB connection to URL {0} due to: {1}"; //$NON-NLS-1$
|
||||||
|
|
Loading…
Reference in New Issue