[jbpm-commits] JBoss JBPM SVN: r5717 - in jbpm3/branches/jbpm-3.2-soa/modules: core/src/test/java/org/jbpm/context/exe and 2 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Thu Oct 8 02:03:55 EDT 2009
Author: alex.guizar at jboss.com
Date: 2009-10-08 02:03:55 -0400 (Thu, 08 Oct 2009)
New Revision: 5717
Modified:
jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/db/JbpmSchema.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableLongIdDbTest.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableStringIdDbTest.java
jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/graph/node/JoinDbTest.java
jbpm3/branches/jbpm-3.2-soa/modules/examples/src/test/java/org/jbpm/examples/taskinstance/CustomTaskInstanceTest.java
Log:
[JBPM-2563] workaround for HHH-4457
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/db/JbpmSchema.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/db/JbpmSchema.java 2009-10-07 22:49:40 UTC (rev 5716)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/main/java/org/jbpm/db/JbpmSchema.java 2009-10-08 06:03:55 UTC (rev 5717)
@@ -49,7 +49,10 @@
import org.hibernate.connection.ConnectionProvider;
import org.hibernate.connection.ConnectionProviderFactory;
import org.hibernate.dialect.Dialect;
+import org.hibernate.engine.Mapping;
+import org.hibernate.mapping.Column;
import org.hibernate.mapping.Table;
+import org.hibernate.tool.hbm2ddl.ColumnMetadata;
import org.hibernate.tool.hbm2ddl.DatabaseMetadata;
import org.hibernate.tool.hbm2ddl.TableMetadata;
import org.hibernate.util.JDBCExceptionReporter;
@@ -122,8 +125,8 @@
Connection connection = null;
try {
connection = createConnection();
- return configuration.generateSchemaUpdateScript(getDialect(),
- getDatabaseMetadata(connection));
+ return configuration
+ .generateSchemaUpdateScript(getDialect(), getDatabaseMetadata(connection));
}
catch (SQLException e) {
exceptions.add(e);
@@ -307,8 +310,8 @@
DatabaseMetaData metaData = connection.getMetaData();
boolean storesLowerCaseIdentifiers = metaData.storesLowerCaseIdentifiers();
- ResultSet resultSet = metaData.getTables(getDefaultCatalog(), getDefaultSchema(), null,
- TABLE_TYPES);
+ ResultSet resultSet = metaData
+ .getTables(getDefaultCatalog(), getDefaultSchema(), null, TABLE_TYPES);
try {
while (resultSet.next()) {
String tableName = resultSet.getString("TABLE_NAME");
@@ -339,8 +342,8 @@
connection = createConnection();
DatabaseMetaData metaData = connection.getMetaData();
- ResultSet resultSet = metaData.getTables(getDefaultCatalog(), getDefaultSchema(),
- tableName, TABLE_TYPES);
+ ResultSet resultSet = metaData
+ .getTables(getDefaultCatalog(), getDefaultSchema(), tableName, TABLE_TYPES);
try {
return resultSet.next();
}
@@ -360,20 +363,24 @@
}
public void updateTable(String tableName) {
+ Table table = findTableMapping(tableName);
+
Connection connection = null;
try {
connection = createConnection();
+ TableMetadata tableInfo = getTableMetadata(connection, table);
- Table table = findTableMapping(tableName);
- Iterator script = table.sqlAlterStrings(getDialect(), configuration.buildMapping(),
- getTableMetadata(connection, table), getDefaultCatalog(), getDefaultSchema());
-
Statement statement = connection.createStatement();
try {
- while (script.hasNext()) {
- String sql = (String) script.next();
- execute(sql, statement);
+ if (tableInfo != null) {
+ for (Iterator script = sqlAlterStrings(table, tableInfo); script.hasNext();) {
+ String sql = (String) script.next();
+ execute(sql, statement);
+ }
}
+ else {
+ execute(sqlCreateString(table), statement);
+ }
}
finally {
statement.close();
@@ -396,23 +403,92 @@
throw new JbpmException("no mapping found for table: " + tableName);
}
+ private TableMetadata getTableMetadata(Connection connection, Table table)
+ throws SQLException {
+ String tableSchema = table.getSchema();
+ if (tableSchema == null) tableSchema = getDefaultSchema();
+
+ String tableCatalog = table.getCatalog();
+ if (tableCatalog == null) tableCatalog = getDefaultCatalog();
+
+ return getDatabaseMetadata(connection)
+ .getTableMetadata(table.getName(), tableSchema, tableCatalog, table.isQuoted());
+ }
+
private DatabaseMetadata getDatabaseMetadata(Connection connection) throws SQLException {
return new DatabaseMetadata(connection, getDialect());
}
- private TableMetadata getTableMetadata(Connection connection, Table table)
- throws SQLException {
- String tableSchema = table.getSchema();
- String tableCatalog = table.getCatalog();
- return getDatabaseMetadata(connection).getTableMetadata(table.getName(),
- tableSchema != null ? tableSchema : getDefaultSchema(),
- tableCatalog != null ? tableCatalog : getDefaultCatalog(), table.isQuoted());
+ /**
+ * Workaround for bug in {@link Table#sqlAlterStrings}.
+ *
+ * @param table TODO
+ * @param tableMetadata TODO
+ * @see <a
+ * href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-4457">HHH-4457</a>
+ */
+ private Iterator sqlAlterStrings(Table table, TableMetadata tableMetadata)
+ throws SQLException {
+ Dialect dialect = getDialect();
+ Mapping mapping = configuration.buildMapping();
+
+ StringBuffer root = new StringBuffer("alter table ")
+ .append(table.getQualifiedName(dialect, getDefaultCatalog(), getDefaultSchema()))
+ .append(' ')
+ .append(dialect.getAddColumnString());
+ int rootLength = root.length();
+
+ List results = new ArrayList();
+ for (Iterator iter = table.getColumnIterator(); iter.hasNext();) {
+ Column column = (Column) iter.next();
+
+ ColumnMetadata columnInfo = tableMetadata.getColumnMetadata(column.getName());
+ if (columnInfo == null) {
+ // the column doesn't exist at all
+ root.setLength(rootLength);
+ StringBuffer alter = root
+ .append(' ')
+ .append(column.getQuotedName(dialect))
+ .append(' ')
+ .append(column.getSqlType(dialect, mapping));
+
+ String defaultValue = column.getDefaultValue();
+ if (defaultValue != null) {
+ alter.append(" default ").append(defaultValue);
+ }
+
+ if (column.isNullable()) {
+ alter.append(dialect.getNullColumnString());
+ }
+ else {
+ alter.append(" not null");
+ }
+
+ boolean useUniqueConstraint = column.isUnique()
+ && dialect.supportsUnique()
+ && (!column.isNullable() || dialect.supportsNotNullUnique());
+ if (useUniqueConstraint) {
+ alter.append(" unique");
+ }
+
+ if (column.hasCheckConstraint() && dialect.supportsColumnCheck()) {
+ alter.append(" check(").append(column.getCheckConstraint()).append(")");
+ }
+
+ String columnComment = column.getComment();
+ if (columnComment != null) {
+ alter.append(dialect.getColumnComment(columnComment));
+ }
+
+ results.add(alter.toString());
+ }
+ }
+ return results.iterator();
}
public void createTable(String tableName) {
Table table = findTableMapping(tableName);
- String sql = table.sqlCreateString(getDialect(), configuration.buildMapping(),
- getDefaultCatalog(), getDefaultSchema());
+ String sql = sqlCreateString(table);
try {
execute(new String[] { sql });
}
@@ -422,6 +498,11 @@
}
}
+ private String sqlCreateString(Table table) {
+ return table
+ .sqlCreateString(getDialect(), configuration.buildMapping(), getDefaultCatalog(), getDefaultSchema());
+ }
+
public static void main(String[] args) {
if (args.length > 0) {
String action = args[0];
@@ -454,7 +535,8 @@
System.err.println("JbpmSchema drop [<hibernate.cfg.xml> [<hibernate.properties>]]");
System.err.println("JbpmSchema clean [<hibernate.cfg.xml> [<hibernate.properties>]]");
System.err.println("JbpmSchema update [<hibernate.cfg.xml> [<hibernate.properties>]]");
- System.err.println("JbpmSchema scripts <dir> <prefix> [<hibernate.cfg.xml> [<hibernate.properties>]]");
+ System.err
+ .println("JbpmSchema scripts <dir> <prefix> [<hibernate.cfg.xml> [<hibernate.properties>]]");
System.exit(1);
}
@@ -491,7 +573,8 @@
private Connection createConnection() throws SQLException {
try {
- connectionProvider = ConnectionProviderFactory.newConnectionProvider(configuration.getProperties());
+ connectionProvider = ConnectionProviderFactory.newConnectionProvider(configuration
+ .getProperties());
}
catch (HibernateException e) {
throw new SQLException(e.getMessage());
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableLongIdDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableLongIdDbTest.java 2009-10-07 22:49:40 UTC (rev 5716)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableLongIdDbTest.java 2009-10-08 06:03:55 UTC (rev 5717)
@@ -47,7 +47,7 @@
configuration.addClass(CustomLongClass.class);
JbpmSchema jbpmSchema = new JbpmSchema(configuration);
- jbpmSchema.updateSchema();
+ jbpmSchema.createTable("JBPM_TEST_CUSTOMLONGID");
}
finally {
jbpmContext.close();
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableStringIdDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableStringIdDbTest.java 2009-10-07 22:49:40 UTC (rev 5716)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/context/exe/CustomVariableStringIdDbTest.java 2009-10-08 06:03:55 UTC (rev 5717)
@@ -47,7 +47,7 @@
configuration.addClass(CustomStringClass.class);
JbpmSchema jbpmSchema = new JbpmSchema(configuration);
- jbpmSchema.updateSchema();
+ jbpmSchema.createTable("JBPM_TEST_CUSTOMSTRINGID");
}
finally {
jbpmContext.close();
Modified: jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/graph/node/JoinDbTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/graph/node/JoinDbTest.java 2009-10-07 22:49:40 UTC (rev 5716)
+++ jbpm3/branches/jbpm-3.2-soa/modules/core/src/test/java/org/jbpm/graph/node/JoinDbTest.java 2009-10-08 06:03:55 UTC (rev 5717)
@@ -78,7 +78,7 @@
.getServiceFactory(Services.SERVICENAME_PERSISTENCE);
JbpmSchema jbpmSchema = new JbpmSchema(persistenceServiceFactory.getConfiguration());
- jbpmSchema.updateSchema();
+ jbpmSchema.updateTable("JBPM_NODE");
}
finally {
jbpmContext.close();
Modified: jbpm3/branches/jbpm-3.2-soa/modules/examples/src/test/java/org/jbpm/examples/taskinstance/CustomTaskInstanceTest.java
===================================================================
--- jbpm3/branches/jbpm-3.2-soa/modules/examples/src/test/java/org/jbpm/examples/taskinstance/CustomTaskInstanceTest.java 2009-10-07 22:49:40 UTC (rev 5716)
+++ jbpm3/branches/jbpm-3.2-soa/modules/examples/src/test/java/org/jbpm/examples/taskinstance/CustomTaskInstanceTest.java 2009-10-08 06:03:55 UTC (rev 5717)
@@ -66,7 +66,7 @@
configuration.addResource("taskinstance/CustomTaskInstance.hbm.xml");
JbpmSchema jbpmSchema = new JbpmSchema(configuration);
- jbpmSchema.updateSchema();
+ jbpmSchema.updateTable("JBPM_TASKINSTANCE");
}
return jbpmConfiguration;
}
More information about the jbpm-commits
mailing list