-
Notifications
You must be signed in to change notification settings - Fork 214
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #31 from koentsje/4.0.x-devel
4.0.x devel
- Loading branch information
Showing
12 changed files
with
321 additions
and
69 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
74 changes: 74 additions & 0 deletions
74
src/java/org/hibernate/cfg/reveng/dialect/SQLServerMetaDataDialect.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,74 @@ | |||
package org.hibernate.cfg.reveng.dialect; | |||
|
|||
import java.sql.PreparedStatement; | |||
import java.sql.ResultSet; | |||
import java.sql.SQLException; | |||
import java.util.HashMap; | |||
import java.util.Iterator; | |||
import java.util.Map; | |||
|
|||
/** | |||
* | |||
* @author ddukker | |||
* | |||
*/ | |||
public class SQLServerMetaDataDialect 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 + ")"); | |||
|
|||
sql = "SELECT a.TABLE_CATALOG, a.TABLE_SCHEMA, a.TABLE_NAME as table_name, c.DATA_TYPE as data_type, b.CONSTRAINT_TYPE, OBJECTPROPERTY(OBJECT_ID(a.TABLE_NAME),'TableHasIdentity') as hasIdentity " + | |||
"FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a " + | |||
"INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS b on a.CONSTRAINT_NAME = b.CONSTRAINT_NAME " + | |||
"INNER JOIN INFORMATION_SCHEMA.Columns c on a.TABLE_CATALOG = c.TABLE_CATALOG AND a.TABLE_SCHEMA = c.TABLE_SCHEMA AND a.TABLE_NAME = c.TABLE_NAME AND a.COLUMN_NAME = c.COLUMN_NAME " + | |||
"WHERE a.TABLE_NAME='"+table+"' AND a.TABLE_SCHEMA='"+schema+"' AND a.TABLE_CATALOG='"+catalog+"' AND b.CONSTRAINT_TYPE = 'Primary key'"; | |||
|
|||
PreparedStatement statement = getConnection().prepareStatement( sql ); | |||
|
|||
final String sc = schema; | |||
final String cat = catalog; | |||
return new ResultSetIterator(statement.executeQuery(), getSQLExceptionConverter()) { | |||
|
|||
Map element = new HashMap(); | |||
protected Object convertRow(ResultSet tableRs) throws SQLException { | |||
element.clear(); | |||
element.put("TABLE_NAME", tableRs.getString("table_name")); | |||
element.put("TABLE_SCHEM", sc); | |||
element.put("TABLE_CAT", cat); | |||
|
|||
String string = tableRs.getString("data_type"); | |||
|
|||
boolean bool = tableRs.getBoolean("hasIdentity"); | |||
if(string!=null) { | |||
if(string.equalsIgnoreCase("uniqueidentifier")){ | |||
element.put("HIBERNATE_STRATEGY", "guid"); | |||
}else if(bool){ | |||
element.put("HIBERNATE_STRATEGY", "identity"); | |||
}else{ | |||
element.put("HIBERNATE_STRATEGY", null); | |||
} | |||
}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); | |||
} | |||
} | |||
|
|||
} | |||
|
Oops, something went wrong.