Salut all,

I had problems with schemas containing a dash in the name. SchemaExport
fails e. g. with a schema name like "component-security" on postgresql
(I'm sure that this is an issue on other DB systems, too). When I looked
into hibernates source I saw that table names can be quoted with
backticks, but schema names cannot. Is there a reason for this
behaviour...? I admit that I'm new to hibernate... at least concerning
it's source code ;-)

Attached you can find a little patch for the class
org.hibernate.mapping.Table which recognizes quoted schemas.

Cheers,

Aleks
Index: Table.java
===================================================================
RCS file: /cvsroot/hibernate/Hibernate3/src/org/hibernate/mapping/Table.java,v
retrieving revision 1.33
diff -u -r1.33 Table.java
--- Table.java	11 Apr 2005 12:40:40 -0000	1.33
+++ Table.java	23 Apr 2005 15:04:44 -0000
@@ -38,6 +38,7 @@
 	private Map uniqueKeys = new HashMap();
 	private final int uniqueInteger;
 	private boolean quoted;
+	private boolean quotedSchema;
 	private static int tableCounter = 0;
 	private List checkConstraints = new ArrayList();
 	private String rowId;
@@ -78,7 +79,7 @@
 	public String getQualifiedName(Dialect dialect, String defaultCatalog, String defaultSchema) {
 		if ( subselect != null ) return "( " + subselect + " )";
 		String quotedName = getQuotedName( dialect );
-		String usedSchema = schema == null ? defaultSchema : schema;
+		String usedSchema = schema == null ? defaultSchema : getQuotedSchema( dialect );
 		String usedCatalog = catalog == null ? defaultCatalog : catalog;
 		return Table.qualify( usedCatalog, usedSchema, quotedName, dialect.getSchemaSeparator() );
 	}
@@ -109,6 +110,12 @@
 				name;
 	}
 
+	public String getQuotedSchema(Dialect dialect) {
+		return quotedSchema ?
+				dialect.openQuote() + schema + dialect.closeQuote() :
+				schema;
+	}
+
 	public void setName(String name) {
 		if ( name.charAt( 0 ) == '`' ) {
 			quoted = true;
@@ -435,7 +442,13 @@
 	}
 
 	public void setSchema(String schema) {
-		this.schema = schema;
+		if ( schema.charAt( 0 ) == '`' ) {
+			quotedSchema = true;
+			this.schema = schema.substring( 1, schema.length() - 1 );
+		}
+		else {
+			this.schema = schema;
+		}
 	}
 
 	public String getCatalog() {

Reply via email to