47 boolean createdTable =
false;
48 Executor executor = ExecutorService.getInstance().getExecutor(database);
50 if (!hasDatabaseChangeLogLockTable()) {
53 if (
log.isTraceEnabled()) {
54 log.trace(
"Create Database Lock Table");
56 executor.execute(
new CreateDatabaseChangeLogLockTableStatement());
58 }
catch (DatabaseException de) {
59 log.warn(
"Failed to create lock table. Maybe other transaction created in the meantime. Retrying...");
60 if (
log.isTraceEnabled()) {
61 log.trace(de.getMessage(), de);
64 throw new LockRetryException(de);
67 log.debugf(
"Created database lock table with name: %s", database.escapeTableName(database.getLiquibaseCatalogName(), database.getLiquibaseSchemaName(), database.getDatabaseChangeLogLockTableName()));
70 Field field = Reflections.findDeclaredField(StandardLockService.class,
"hasDatabaseChangeLogLockTable");
71 Reflections.setAccessible(field);
72 field.set(CustomLockService.this,
true);
73 }
catch (IllegalAccessException iae) {
74 throw new RuntimeException(iae);
81 if (!isDatabaseChangeLogLockTableInitialized(createdTable)) {
83 if (
log.isTraceEnabled()) {
84 log.trace(
"Initialize Database Lock Table");
86 executor.execute(
new InitializeDatabaseChangeLogLockTableStatement());
89 }
catch (DatabaseException de) {
90 log.warn(
"Failed to insert first record to the lock table. Maybe other transaction inserted in the meantime. Retrying...");
91 if (
log.isTraceEnabled()) {
92 log.trace(de.getMessage(), de);
95 throw new LockRetryException(de);
98 log.debug(
"Initialized record in the database lock table");
103 if (executor.updatesDatabase() && database instanceof DerbyDatabase && ((DerbyDatabase) database).supportsBooleanDataType()) {
104 String lockTable = database.escapeTableName(database.getLiquibaseCatalogName(), database.getLiquibaseSchemaName(), database.getDatabaseChangeLogLockTableName());
105 Object obj = executor.queryForObject(
new RawSqlStatement(
"select min(locked) as test from " + lockTable +
" fetch first row only"), Object.class);
106 if (!(obj instanceof Boolean)) {
107 executor.execute(
new DropTableStatement(database.getLiquibaseCatalogName(), database.getLiquibaseSchemaName(), database.getDatabaseChangeLogLockTableName(),
false));
108 executor.execute(
new CreateDatabaseChangeLogLockTableStatement());
109 executor.execute(
new InitializeDatabaseChangeLogLockTableStatement());
static final Logger log
Definition: CustomLockService.java:43