Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Merge branch 'ensure-innodb' into ensure-innodb-on-37
Browse files Browse the repository at this point in the history
Conflicts:
	zanata-war/pom.xml
	zanata-war/src/main/resources/db/changelogs/db.changelog-3.6.xml
  • Loading branch information
seanf committed May 4, 2015
2 parents bb1bb59 + c69d8ec commit b9b4c7a
Show file tree
Hide file tree
Showing 11 changed files with 401 additions and 10 deletions.
14 changes: 14 additions & 0 deletions docs/release-notes.md
Expand Up @@ -38,6 +38,20 @@ Example usage in html file: `<link rel="shortcut icon" href="#{assets['img/logo/
* [1133989](https://bugzilla.redhat.com/show_bug.cgi?id=1133989) - Copy translations from existing version.
*

## 3.6.3

<h5>Bugfixes</h5>
* [1207575](https://bugzilla.redhat.com/show_bug.cgi?id=1207575) - Zanata still creates MyISAM (not InnoDB) tables in some cases

-----------------------

## 3.6.2

<h5>Bugfixes</h5>
* [1206018](https://bugzilla.redhat.com/show_bug.cgi?id=1206018) - RichFaces: Remote Command Execution via insufficient EL parameter sanitization

-----------------------

## 3.6.1

<h5>Bug fixes</h5>
Expand Down
7 changes: 7 additions & 0 deletions pom.xml
Expand Up @@ -480,6 +480,12 @@
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.zanata</groupId>
<artifactId>zanata-liquibase</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>com.google.gwt</groupId>
<artifactId>gwt-dev</artifactId>
Expand Down Expand Up @@ -1630,6 +1636,7 @@
</distributionManagement>

<modules>
<module>zanata-liquibase</module>
<module>zanata-model</module>
<module>zanata-war</module>
<module>zanata-test-war</module>
Expand Down
32 changes: 32 additions & 0 deletions zanata-liquibase/pom.xml
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>server</artifactId>
<groupId>org.zanata</groupId>
<version>3.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>zanata-liquibase</artifactId>

<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<failIfNoTests>false</failIfNoTests>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
</dependencies>

</project>
@@ -0,0 +1,119 @@
/*
* Copyright 2015, Red Hat, Inc. and individual contributors as indicated by the
* @author tags. See the copyright.txt file in the distribution for a full
* listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package liquibase.ext;

import liquibase.database.Database;
import liquibase.database.core.MySQLDatabase;
import liquibase.exception.UnexpectedLiquibaseException;
import liquibase.exception.ValidationErrors;
import liquibase.logging.LogFactory;
import liquibase.logging.Logger;
import liquibase.sql.Sql;
import liquibase.sql.UnparsedSql;
import liquibase.sqlgenerator.SqlGeneratorChain;
import liquibase.sqlgenerator.core.CreateTableGenerator;
import liquibase.statement.core.CreateTableStatement;
import liquibase.structure.DatabaseObject;

import java.util.Collection;

/**
* A create table statement generator to force the use of the InnoDB engine
* on MySQL/MariaDB, unless the engine has already been specified by other
* means (eg modifySql).
* <p>
* Note: SqlGenerator implementations must live in package
* "liquibase.ext" (or similar) to be automatically registered.
* </p>
*
* @author Sean Flanigan <a
* href="mailto:sflaniga@redhat.com">sflaniga@redhat.com</a>
*/
@SuppressWarnings("unused")
public class CreateTableGeneratorInnoDB extends CreateTableGenerator {

@Override
public boolean supports(CreateTableStatement statement, Database database) {
// NB this will include MariaDB (with Liquibase 3.4+)
return database instanceof MySQLDatabase;
}

@Override
public int getPriority() {
// Higher priority than the built-ins
return PRIORITY_DATABASE + 1;
}

@Override
public ValidationErrors validate(CreateTableStatement createTableStatement,
Database database, SqlGeneratorChain sqlGeneratorChain) {
return sqlGeneratorChain.validate(createTableStatement, database);
}

@Override
public Sql[] generateSql(CreateTableStatement statement, Database database,
SqlGeneratorChain sqlGeneratorChain) {
Logger log = LogFactory.getLogger();

boolean foundCreateTable = false;
Sql[] sqls = sqlGeneratorChain.generateSql(statement, database).clone();

// Append " ENGINE=INNODB" to CREATE TABLE unless ENGINE already
// specified. This is clumsy, but Liquibase doesn't have seem
// to have any better hooks for this.
for (int i = 0; i < sqls.length; i++) {
Sql sql = sqls[i];
String sqlText = sql.toSql();
String sqlUpper = sqlText.trim().toUpperCase();
if (sqlUpper.startsWith("CREATE TABLE ")) {
foundCreateTable = true;

if (!(sqlUpper.contains(" ENGINE ") || sqlUpper
.contains(" ENGINE="))) {
log.info("Adding ENGINE=INNODB to generated SQL for table "
+ statement.getTableName());
sqlText += " ENGINE=INNODB ";
DatabaseObject[] objects = toArray(
sql.getAffectedDatabaseObjects());
sqls[i] =
new UnparsedSql(sqlText, sql.getEndDelimiter(),
objects);
} else {
log.info("SQL for CREATE TABLE already contains ENGINE for table "
+ statement.getTableName());
}
}
}
if (!foundCreateTable) {
throw new UnexpectedLiquibaseException(
"CREATE TABLE not found; unable to ensure ENGINE=INNODB for table "
+ statement.getTableName());
}
return sqls;
}

private DatabaseObject[] toArray(
Collection<? extends DatabaseObject> objects) {
return objects.toArray(
new DatabaseObject[objects.size()]);
}

}
@@ -0,0 +1,75 @@
/*
* Copyright 2015, Red Hat, Inc. and individual contributors as indicated by the
* @author tags. See the copyright.txt file in the distribution for a full
* listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this software; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA, or see the FSF
* site: http://www.fsf.org.
*/
package liquibase.ext;


import liquibase.change.Change;
import liquibase.changelog.ChangeSet;
import liquibase.changelog.DatabaseChangeLog;
import liquibase.database.Database;
import liquibase.database.core.MySQLDatabase;
import liquibase.exception.LiquibaseException;
import liquibase.exception.RollbackImpossibleException;
import liquibase.exception.ValidationErrors;
import liquibase.logging.LogFactory;
import liquibase.logging.Logger;
import liquibase.sql.Sql;
import liquibase.sql.visitor.SqlVisitor;
import liquibase.sqlgenerator.SqlGeneratorChain;
import liquibase.sqlgenerator.core.AbstractSqlGenerator;
import liquibase.statement.SqlStatement;
import liquibase.util.StreamUtil;

import java.io.StringWriter;
import java.util.List;


/**
* A slightly modified MySQLDatabase which simply logs each change before
* executing.
* <p>
* Note: SqlGenerator implementations must live in package
* "liquibase.ext" (or similar) to be automatically registered.
* </p>
*
* @author Sean Flanigan <a
* href="mailto:sflaniga@redhat.com">sflaniga@redhat.com</a>
*/
@SuppressWarnings("unused")
public class MySQLDatabaseWithLog extends MySQLDatabase {

@Override
public int getPriority() {
// Higher priority than the built-ins
return PRIORITY_DATABASE;
}

@Override
public void executeStatements(Change change, DatabaseChangeLog changeLog,
List<SqlVisitor> sqlVisitors) throws LiquibaseException {
if (getConnection() != null) {
// don't log if running offline
Logger log = LogFactory.getLogger();
log.info("Executing " + change.getClass().getSimpleName());
}
super.executeStatements(change, changeLog, sqlVisitors);
}
}
5 changes: 5 additions & 0 deletions zanata-war/pom.xml
Expand Up @@ -1287,6 +1287,11 @@
<artifactId>zanata-common-util</artifactId>
</dependency>

<dependency>
<groupId>org.zanata</groupId>
<artifactId>zanata-liquibase</artifactId>
</dependency>

<dependency>
<groupId>org.zanata</groupId>
<artifactId>zanata-model</artifactId>
Expand Down
Expand Up @@ -18,13 +18,4 @@
<comment>h2 baseline schema</comment>
<sqlFile path="db/h2/h2_baseline.sql" stripComments="true" />
</changeSet>

<changeSet id="1" author="camunoz@redhat.com" dbms="mysql" failOnError="false" runAlways="true">
<comment>Set session's default storage engine to INNODB (mysql ver &gt; 5.5)</comment>
<sql>SET storage_engine=InnoDB</sql>
</changeSet>
<changeSet id="2" author="camunoz@redhat.com" dbms="mysql" failOnError="false" runAlways="true">
<comment>Set session's default storage engine to INNODB (mysql ver &lt; 5.5)</comment>
<sql>SET default_storage_engine=InnoDB</sql>
</changeSet>
</databaseChangeLog>

0 comments on commit b9b4c7a

Please sign in to comment.