Return-Path: Delivered-To: apmail-incubator-open-jpa-dev-archive@locus.apache.org Received: (qmail 28352 invoked from network); 30 Jan 2007 06:50:17 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 30 Jan 2007 06:50:17 -0000 Received: (qmail 97502 invoked by uid 500); 30 Jan 2007 06:50:23 -0000 Delivered-To: apmail-incubator-open-jpa-dev-archive@incubator.apache.org Received: (qmail 97475 invoked by uid 500); 30 Jan 2007 06:50:23 -0000 Mailing-List: contact open-jpa-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: open-jpa-dev@incubator.apache.org Delivered-To: mailing list open-jpa-dev@incubator.apache.org Received: (qmail 97466 invoked by uid 99); 30 Jan 2007 06:50:23 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 29 Jan 2007 22:50:23 -0800 X-ASF-Spam-Status: No, hits=2.0 required=10.0 tests=HTML_MESSAGE X-Spam-Check-By: apache.org Received-SPF: neutral (herse.apache.org: local policy) Received: from [64.233.184.232] (HELO wr-out-0506.google.com) (64.233.184.232) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 29 Jan 2007 22:50:14 -0800 Received: by wr-out-0506.google.com with SMTP id i7so1142227wra for ; Mon, 29 Jan 2007 22:49:52 -0800 (PST) Received: by 10.114.93.1 with SMTP id q1mr12516wab.1170139792039; Mon, 29 Jan 2007 22:49:52 -0800 (PST) Received: by 10.114.182.11 with HTTP; Mon, 29 Jan 2007 22:49:52 -0800 (PST) Message-ID: Date: Tue, 30 Jan 2007 14:49:52 +0800 From: "William Cai" To: open-jpa-dev@incubator.apache.org Subject: SchemaCase setting in org.apache.openjpa.jdbc.sql.SQLServerDictionary MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_17810_26935012.1170139792011" X-Virus-Checked: Checked by ClamAV on apache.org ------=_Part_17810_26935012.1170139792011 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline 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 ------=_Part_17810_26935012.1170139792011--