[hibernate-commits] Hibernate SVN: r18623 - in branches/Branch_3_2/HibernateExt/tools/src: java/org/hibernate/cfg/reveng/dialect and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Jan 26 03:48:00 EST 2010


Author: max.andersen at 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);
+	}
+
+}



More information about the hibernate-commits mailing list