On Wed, Feb 16, 2011 at 11:36, Sergiu Dumitriu <[email protected]> wrote:
> 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();

Ok thanks

>
> I think nobody wants to use ` or " in the wiki name, so there shouldn't
> be a need for doubling them.

No sure about that. We have to do something, either remove or properly
escape then otherwise it's not very safe

>
> BTW, SQLServer uses [ ] for quoting.

You mean DB2 ?

>
>> +        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
>



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to