Author: max.andersen(a)jboss.com
Date: 2010-01-26 03:48:00 -0500 (Tue, 26 Jan 2010)
New Revision: 18623
Added:
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/dialect/HSQLMetaDataDialect.java
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/identity/HSQLIdentityTest.java
Modified:
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCReaderFactory.java
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2XAllTests.java
Log:
JBIDE-4486 Primary Key or Idenity not being respected (reviewed and committed patch from
dgeraskov)
Modified:
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCReaderFactory.java
===================================================================
---
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCReaderFactory.java 2010-01-26
02:58:26 UTC (rev 18622)
+++
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/JDBCReaderFactory.java 2010-01-26
08:48:00 UTC (rev 18623)
@@ -5,12 +5,14 @@
import org.hibernate.cfg.reveng.JDBCReader;
import org.hibernate.cfg.reveng.ReverseEngineeringStrategy;
import org.hibernate.cfg.reveng.dialect.H2MetaDataDialect;
+import org.hibernate.cfg.reveng.dialect.HSQLMetaDataDialect;
import org.hibernate.cfg.reveng.dialect.JDBCMetaDataDialect;
import org.hibernate.cfg.reveng.dialect.MetaDataDialect;
import org.hibernate.cfg.reveng.dialect.MySQLMetaDataDialect;
import org.hibernate.cfg.reveng.dialect.OracleMetaDataDialect;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.H2Dialect;
+import org.hibernate.dialect.HSQLDialect;
import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.Oracle9Dialect;
import org.hibernate.util.ReflectHelper;
@@ -50,6 +52,8 @@
return new H2MetaDataDialect();
} else if (dialect instanceof MySQLDialect) {
return new MySQLMetaDataDialect();
+ } else if (dialect instanceof HSQLDialect) {
+ return new HSQLMetaDataDialect();
}
}
return new JDBCMetaDataDialect();
Added:
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/dialect/HSQLMetaDataDialect.java
===================================================================
---
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/dialect/HSQLMetaDataDialect.java
(rev 0)
+++
branches/Branch_3_2/HibernateExt/tools/src/java/org/hibernate/cfg/reveng/dialect/HSQLMetaDataDialect.java 2010-01-26
08:48:00 UTC (rev 18623)
@@ -0,0 +1,72 @@
+package org.hibernate.cfg.reveng.dialect;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.hibernate.cfg.reveng.dialect.JDBCMetaDataDialect;
+import org.hibernate.cfg.reveng.dialect.ResultSetIterator;
+
+/**
+ * @author Dmitry Geraskov
+ *
+ */
+public class HSQLMetaDataDialect extends JDBCMetaDataDialect {
+
+ public Iterator getSuggestedPrimaryKeyStrategyName(String catalog, String schema, String
table) {
+ String sql = null;
+ try {
+ catalog = caseForSearch( catalog );
+ schema = caseForSearch( schema );
+ table = caseForSearch( table );
+
+ //log.debug("geSuggestedPrimaryKeyStrategyName(" + catalog + "."
+ schema + "." + table + ")");
+
+ final String sc = schema;
+ return new ResultSetIterator(getMetaData().getTables(catalog, schema, table, new
String[]{"TABLE"}),
+ getSQLExceptionConverter()) {
+
+ Map element = new HashMap();
+ protected Object convertRow(ResultSet tableRs) throws SQLException{
+ String table = tableRs.getString("TABLE_NAME");
+ String fullTableName = (sc == null ? "" : sc + '.') + table;
+
+ String sql ="SELECT * FROM " + fullTableName + " WHERE FALSE";
+ PreparedStatement statement = getConnection().prepareStatement( sql );
+
+ element.clear();
+ element.put("TABLE_NAME", table);
+ element.put("TABLE_SCHEM", sc);
+ element.put("TABLE_CAT", null);
+
+ boolean isAutoIncrement = false;
+ ResultSet rs = statement.executeQuery();
+ ResultSetMetaData rsmd = rs.getMetaData();
+ for (int i = 0; i < rsmd.getColumnCount(); i++) {
+ isAutoIncrement = rsmd.isAutoIncrement(i + 1);
+ if (isAutoIncrement) break;
+ }
+
+ if(isAutoIncrement) {
+ element.put("HIBERNATE_STRATEGY", "identity");
+ } else {
+ element.put("HIBERNATE_STRATEGY", null);
+ }
+ return element;
+ }
+ protected Throwable handleSQLException(SQLException e) {
+ // schemaRs and catalogRs are only used for error reporting if
+ // we get an exception
+ throw getSQLExceptionConverter().convert( e,
+ "Could not get list of suggested identity strategies from database. Probably
a JDBC driver problem. ", null);
+ }
+ };
+ } catch (SQLException e) {
+ throw getSQLExceptionConverter().convert(e, "Could not get list of suggested
identity strategies from database. Probably a JDBC driver problem. ", sql);
+ }
+ }
+}
Modified:
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2XAllTests.java
===================================================================
---
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2XAllTests.java 2010-01-26
02:58:26 UTC (rev 18622)
+++
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/hbm2x/Hbm2XAllTests.java 2010-01-26
08:48:00 UTC (rev 18623)
@@ -1,11 +1,12 @@
package org.hibernate.tool.hbm2x;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
import org.hibernate.tool.test.jdbc2cfg.identity.H2IdentityTest;
+import org.hibernate.tool.test.jdbc2cfg.identity.HSQLIdentityTest;
import org.hibernate.tool.test.jdbc2cfg.identity.MySQLIdentityTest;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
public class Hbm2XAllTests {
public static Test suite() {
@@ -36,6 +37,7 @@
suite.addTestSuite(H2IdentityTest.class);
suite.addTestSuite(MySQLIdentityTest.class);
+ suite.addTestSuite(HSQLIdentityTest.class);
return suite;
}
Added:
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/identity/HSQLIdentityTest.java
===================================================================
---
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/identity/HSQLIdentityTest.java
(rev 0)
+++
branches/Branch_3_2/HibernateExt/tools/src/test/org/hibernate/tool/test/jdbc2cfg/identity/HSQLIdentityTest.java 2010-01-26
08:48:00 UTC (rev 18623)
@@ -0,0 +1,50 @@
+package org.hibernate.tool.test.jdbc2cfg.identity;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.hibernate.cfg.JDBCMetaDataConfiguration;
+import org.hibernate.cfg.reveng.dialect.HSQLMetaDataDialect;
+import org.hibernate.dialect.Dialect;
+import org.hibernate.dialect.HSQLDialect;
+
+/**
+ * @author Dmitry Geraskov
+ *
+ */
+public class HSQLIdentityTest extends AbstractIdentityTest {
+
+ /**
+ * @return
+ */
+ protected String[] getDropSQL() {
+ return new String[] {
+ "DROP TABLE AUTOINC IF EXISTS",
+ "DROP TABLE NOAUTOINC IF EXISTS",
+ };
+ }
+
+ /**
+ * @return
+ */
+ protected String[] getCreateSQL() {
+
+ return new String[] {
+ "CREATE TABLE AUTOINC (I identity, C CHAR(20), D CHAR(20))",
+ "CREATE TABLE NOAUTOINC (I int, C CHAR(20), D CHAR(20))",
+ };
+ }
+
+ public boolean appliesTo(Dialect dialect) {
+ return dialect instanceof HSQLDialect;
+ }
+
+ protected void configure(JDBCMetaDataConfiguration configuration) {
+ configuration.setProperty( "hibernatetool.metadatadialect",
HSQLMetaDataDialect.class.getName() );
+ }
+
+ public static Test suite() {
+ return new TestSuite(HSQLIdentityTest.class);
+ }
+
+}
Show replies by thread