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

Reply via email to