On 02/16/2011 10:09 AM, tmortagne (SVN) wrote:
Author: tmortagne
Date: 2011-02-16 10:09:31 +0100 (Wed, 16 Feb 2011)
New Revision: 34718
Modified:
platform/core/branches/xwiki-core-2.7/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
platform/core/branches/xwiki-core-2.7/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
Log:
XWIKI-5976: Cannot create subwiki named "lines"
Better (but a lot less elegant...) fix
Modified:
platform/core/branches/xwiki-core-2.7/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java
===================================================================
---
platform/core/branches/xwiki-core-2.7/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java 2011-02-16
09:09:21 UTC (rev 34717)
+++
platform/core/branches/xwiki-core-2.7/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateBaseStore.java 2011-02-16
09:09:31 UTC (rev 34718)
@@ -504,7 +504,6 @@
}
} catch (Exception e) {
}
- ;
try {
if (bTransaction) {
endTransaction(context, true);
@@ -600,13 +599,14 @@
if (context.getDatabase() != null) {
String schemaName = getSchemaFromWikiName(context);
+ String escapedSchemaName = escapeSchema(schemaName, context);
DatabaseProduct databaseProduct = getDatabaseProductName(context);
if (DatabaseProduct.ORACLE == databaseProduct) {
Statement stmt = null;
try {
stmt = session.connection().createStatement();
- stmt.execute("alter session set current_schema = "
+ schemaName);
+ stmt.execute("alter session set current_schema = "
+ escapedSchemaName);
} finally {
try {
if (stmt != null) {
@@ -620,7 +620,7 @@
Statement stmt = null;
try {
stmt = session.connection().createStatement();
- stmt.execute("SET SCHEMA " + schemaName);
+ stmt.execute("SET SCHEMA " + escapedSchemaName);
} finally {
try {
if (stmt != null) {
@@ -648,6 +648,29 @@
}
/**
+ * Escape schema name depending of the database engine.
+ *
+ * @param schema the schema name to escape
+ * @param context the XWiki context to get database engine identifier
+ * @return the escaped version
+ */
+ protected String escapeSchema(String schema, XWikiContext context)
+ {
+ DatabaseProduct databaseProduct = getDatabaseProductName(context);
+
+ String escapedSchema;
You should use this instead:
escapedSchema = dialect.openQuote() + schema + dialect.closeQuote();
I think nobody wants to use ` or " in the wiki name, so there shouldn't
be a need for doubling them.
BTW, SQLServer uses [ ] for quoting.
+ if (DatabaseProduct.MYSQL == databaseProduct)
{
+ // MySQL does not use SQL92 escaping syntax by default
+ escapedSchema = "`" + schema.replace("`",
"``") + "`";
+ } else {
+ // Use SQL92 escape syntax
+ escapedSchema = "\"" + schema.replace("\"",
"\"\"") + "\"";
+ }
+
+ return escapedSchema;
+ }
+
+ /**
* Begins a transaction
*
* @param context
--
Sergiu Dumitriu
http://purl.org/net/sergiu/