openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dain Sundstrom <d...@iq80.com>
Subject Re: SchemaCase setting in org.apache.openjpa.jdbc.sql.SQLServerDictionary
Date Tue, 30 Jan 2007 19:28:41 GMT
You should add that to the database specific notes section in the  
documentation before we all forget about this :)

-dain

On Jan 29, 2007, at 11:50 PM, Marc Prud'hommeaux wrote:

> William-
>
> I didn't know it was an option to have a SQL Server instance be  
> case-sensitive.
>
> Anyway, you can just specify this behavior by setting the following  
> property:
>
>    openjpa.jdbc.DBDictionary: schemaCase=preserve
>
> Let us know if the problem still occurs after you try this setting.
>
>
>
> On Jan 29, 2007, at 10:49 PM, William Cai wrote:
>
>> Hi folks,
>> I met a problem when running OpenJPA on a case-sensitive MS SQL  
>> Server
>> database. Schematool reported below error.
>>
>> Exception in thread "main"  
>> com.microsoft.sqlserver.jdbc.SQLServerException:
>> The database name component of the
>> object qualifier must be the name of the current  
>> database.Listening for
>> transport dt_socket at address: 8111
>>
>>        at
>> com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError 
>> (Unknown
>> Source)
>>        at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets 
>> (Unknown
>> Source)
>>        at  
>> com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown
>> Source)
>>        at
>> com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatement 
>> (Unknown
>> Source)
>>        at
>> com.microsoft.sqlserver.jdbc.SQLServerStatement 
>> $StatementExecutionRequest.executeStatement
>> (Unknown
>> Source)
>>        at com.microsoft.sqlserver.jdbc.CancelableRequest.execute 
>> (Unknown
>> Source)
>>        at  
>> com.microsoft.sqlserver.jdbc.SQLServerConnection.executeRequest 
>> (Unknown
>> Source)
>>        at  
>> com.microsoft.sqlserver.jdbc.SQLServerStatement.executeQuery(Unknown
>> Source)
>>        at
>> com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData.getResultSet 
>> (Unknown
>> Source)
>>        at  
>> com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData.getTables 
>> (Unknown
>> Source)
>>        at  
>> org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getTables(
>> DelegatingDatabaseMetaData.java:32
>> 3)
>>        at
>> org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator 
>> $LoggingConnection$LoggingDatabaseMetaData.ge
>> tTables(LoggingConnectionDecorator.java:658)
>>        at  
>> org.apache.openjpa.lib.jdbc.DelegatingDatabaseMetaData.getTables(
>> DelegatingDatabaseMetaData.java:32
>> 3)
>>        at org.apache.openjpa.jdbc.sql.DBDictionary.getTables(
>> DBDictionary.java:3119)
>>        at  
>> org.apache.openjpa.jdbc.schema.SchemaGenerator.generateTables(
>> SchemaGenerator.java:465)
>>        at  
>> org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchema(
>> SchemaGenerator.java:329)
>>        at  
>> org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchemas(
>> SchemaGenerator.java:260)
>>        at  
>> org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchemas(
>> SchemaGenerator.java:240)
>>        at org.apache.openjpa.jdbc.schema.SchemaTool.run 
>> (SchemaTool.java
>> :1360)
>>        at org.apache.openjpa.jdbc.schema.SchemaTool.run 
>> (SchemaTool.java
>> :1333)
>>        at org.apache.openjpa.jdbc.schema.SchemaTool.main 
>> (SchemaTool.java
>> :1283)
>>
>> After some invesitigation, I found OpenJPA converted the lower  
>> case database
>> name to upper case in
>> org.apache.openjpa.jdbc.sql.DBDictionary.convertSchemaCase 
>> (String). (See
>> below code)  In this function we always convert objectName to  
>> upper case
>> unless schemaCase is set to "lower" or "preserve". schemaCase is  
>> initilized
>> with the value "upper", and changed in EmpressDictionary,  
>> MySQLDictionary,
>> PostgresDictionary, and SybaseDictionary. The problem is we keep  
>> the value
>> in SQLServerDictionary.
>>
>>    protected String convertSchemaCase(String objectName) {
>>        if (objectName == null)
>>            return null;
>>
>>        if (SCHEMA_CASE_LOWER.equals(schemaCase))
>>            return objectName.toLowerCase();
>>        if (SCHEMA_CASE_PRESERVE.equals(schemaCase))
>>            return objectName;
>>        return objectName.toUpperCase();
>>    }
>>
>> One possible solution of my problem is developing a new  
>> SQLServerDictionary
>> in which schemaCase is set to "preserve". It should work. However,  
>> I still
>> have a couple of questions to the list:
>>
>> 1. Do we need set schemaCase to "preserve" in SQLServerDictionary  
>> as we did
>> in SybaseDictionary?
>> 2. Are there any other solutions? e.g. set the value in some  
>> configuration
>> file, etc.
>>
>> Thanks,
>> William
>


Mime
View raw message