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/
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs