openjpa-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mik...@apache.org
Subject svn commit: r1101243 - in /openjpa/trunk/openjpa-jdbc/src: main/java/org/apache/openjpa/jdbc/schema/Table.java main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java test/java/org/apache/openjpa/jdbc/sql/TestDBDictionaryGeneratedSQL.java
Date Mon, 09 May 2011 22:09:41 GMT
Author: mikedd
Date: Mon May  9 22:09:40 2011
New Revision: 1101243

URL: http://svn.apache.org/viewvc?rev=1101243&view=rev
Log:
OPENJPA-1725: Ignore schema when checking the length of a table name

Added:
    openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestDBDictionaryGeneratedSQL.java
  (with props)
Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java?rev=1101243&r1=1101242&r2=1101243&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/schema/Table.java Mon
May  9 22:09:40 2011
@@ -178,7 +178,7 @@ public class Table
     /**
      * Set the name of the table. This method can only be called on tables
      * that are not part of a schema.
-     * @deprecated
+     * @deprecated (use setIdentifier(DBIdentifier) instead.
      */
     public void setName(String name) {
         setIdentifier(DBIdentifier.newTable(name));

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?rev=1101243&r1=1101242&r2=1101243&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
(original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java
Mon May  9 22:09:40 2011
@@ -3317,8 +3317,7 @@ public class DBDictionary
      */
     public String[] getCreateTableSQL(Table table) {
         StringBuilder buf = new StringBuilder();
-        String tableName = checkNameLength(getFullName(table, false), 
-                maxTableNameLength, "long-table-name");
+        String tableName = checkNameLength(getFullIdentifier(table, false), maxTableNameLength,
"long-table-name");
         buf.append("CREATE TABLE ").append(tableName);
         if (supportsComments && table.hasComment()) {
             buf.append(" ");
@@ -5258,9 +5257,48 @@ public class DBDictionary
      * given message key otherwise returns the same name.
      */
     final String checkNameLength(String name, int length, String msgKey) {
-        if (name.length() > length)
-            throw new UserException(_loc.get(msgKey, name, name.length(), 
-                    length));
+        if (name.length() > length) {
+            throw new UserException(_loc.get(msgKey, name, name.length(), length));
+        }
+        return name;
+    }
+    
+    /**
+     * Validate that the given name is not longer than given maximum length. Uses the unqualified
name
+     * from the supplied {@link DBIdentifier} by default..
+     * 
+     * @param identifer The database identifier to check.
+     * @param length    Max length for this type of identifier
+     * @param msgKey    message identifier for the exception.
+     * @param qualified If true the qualified name of the DBIdentifier will be used. 
+     * 
+     * @throws @{link UserException} with the given message key if the given name is indeed
longer.
+     * @return the same name.
+     */
+    final String checkNameLength(DBIdentifier identifier, int length, String msgKey) {
+        return checkNameLength(identifier, length, msgKey, false);
+    }
+
+    /**
+     * Validate that the given name is not longer than given maximum length. Conditionally
uses the unqualified name
+     * from the supplied {@link DBIdentifier}.
+     * 
+     * @param identifer The database identifier to check.
+     * @param length    Max length for this type of identifier
+     * @param msgKey    message identifier for the exception.
+     * @param qualified If true the qualified name of the DBIdentifier will be used. 
+     * 
+     * @throws @{link UserException} with the given message key if the given name is indeed
longer.
+     * @return the same name.
+     */
+    final String checkNameLength(DBIdentifier identifier, int length, String msgKey, boolean
qualified) {
+        // always return the input name, 
+        String name = toDBName(identifier);
+        String compareName = qualified ? name : toDBName(identifier.getUnqualifiedName());
+        
+        if (compareName.length() > length) {
+            throw new UserException(_loc.get(msgKey, name, name.length(), length));
+        }
         return name;
     }
 

Added: openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestDBDictionaryGeneratedSQL.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestDBDictionaryGeneratedSQL.java?rev=1101243&view=auto
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestDBDictionaryGeneratedSQL.java
(added)
+++ openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestDBDictionaryGeneratedSQL.java
Mon May  9 22:09:40 2011
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.jdbc.sql;
+
+import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
+import org.apache.openjpa.jdbc.identifier.DBIdentifier;
+import org.apache.openjpa.jdbc.identifier.DBIdentifierUtilImpl;
+import org.apache.openjpa.jdbc.schema.Table;
+import org.apache.openjpa.util.UserException;
+import org.jmock.Expectations;
+import org.jmock.integration.junit3.MockObjectTestCase;
+
+public class TestDBDictionaryGeneratedSQL extends MockObjectTestCase {
+
+    public void testCreateTableLongNameException() {
+        final JDBCConfiguration mockConfiguration = mock(JDBCConfiguration.class);
+        final DBIdentifierUtilImpl idImpl = new DBIdentifierUtilImpl();
+        
+        checking(new Expectations() {
+            {
+                allowing(mockConfiguration).getIdentifierUtilInstance();
+                will(returnValue(idImpl)); 
+
+                allowing(mockConfiguration);
+            }
+        });
+        
+        DBDictionary dict = new DBDictionary();
+        dict.setConfiguration(mockConfiguration);
+        dict.maxTableNameLength = 10;
+
+        Table table = new Table();
+        table.setIdentifier(DBIdentifier.newTable("NameIsTooLong"));
+        
+        try {
+            dict.getCreateTableSQL(table);
+            fail("Expected a UserException");
+        } catch (UserException ue) {
+            // expected - check message incase a different UserException is thrown.
+            assertTrue(ue.getMessage().contains("Table name \"NameIsTooLong\""));
+        }
+    }
+    
+    
+    public void testThrowsExceptionWithSchemaSet() {
+        final JDBCConfiguration mockConfiguration = mock(JDBCConfiguration.class);
+        final DBIdentifierUtilImpl idImpl = new DBIdentifierUtilImpl();
+        
+        checking(new Expectations() {
+            {
+                allowing(mockConfiguration).getIdentifierUtilInstance();
+                will(returnValue(idImpl)); 
+
+                allowing(mockConfiguration);
+            }
+        });
+        
+        DBDictionary dict = new DBDictionary();
+        dict.setConfiguration(mockConfiguration);
+        dict.maxTableNameLength = 10;
+
+        Table table = new Table();
+        table.setIdentifier(DBIdentifier.newTable("NameIsTooLong"));
+        table.setSchemaIdentifier(DBIdentifier.newSchema("IAmASchema"));
+        
+        try {
+            dict.getCreateTableSQL(table);
+            fail("Expected a UserException");
+        } catch (UserException ue) {
+            // expected - check message incase a different UserException is thrown.
+            assertTrue(ue.getMessage().contains("Table name \"IAmASchema.NameIsTooLong\""));
+        } 
+    }
+    
+    public void testSchemaNameIsNotConsidered() {
+        final JDBCConfiguration mockConfiguration = mock(JDBCConfiguration.class);
+        final DBIdentifierUtilImpl idImpl = new DBIdentifierUtilImpl();
+        
+        checking(new Expectations() {
+            {
+                allowing(mockConfiguration).getIdentifierUtilInstance();
+                will(returnValue(idImpl)); 
+
+                allowing(mockConfiguration);
+            }
+        });
+        
+        DBDictionary dict = new DBDictionary();
+        dict.setConfiguration(mockConfiguration);
+        dict.maxTableNameLength = 12;
+
+        Table table = new Table();
+        table.setIdentifier(DBIdentifier.newTable("NameIsRight"));
+        table.setSchemaIdentifier(DBIdentifier.newSchema("IAmASchema"));
+        
+        String[] sqls = dict.getCreateTableSQL(table);
+        assertEquals(1, sqls.length);
+        assertTrue(sqls[0].contains("NameIsRight"));
+        assertTrue(sqls[0].contains("IAmASchema"));
+    }    
+
+}

Propchange: openjpa/trunk/openjpa-jdbc/src/test/java/org/apache/openjpa/jdbc/sql/TestDBDictionaryGeneratedSQL.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message