You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by jr...@apache.org on 2010/08/17 03:57:22 UTC

svn commit: r986166 - in /openjpa/trunk: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/ openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/

Author: jrbauer
Date: Tue Aug 17 01:57:22 2010
New Revision: 986166

URL: http://svn.apache.org/viewvc?rev=986166&view=rev
Log:
OPENJPA-735 Updated DBIdentifier to allow case insensitive compares for databases that do not support mixed case identifiers.

Modified:
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifier.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifierUtilImpl.java
    openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/QualifiedDBIdentifier.java
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierImpl.java

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifier.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifier.java?rev=986166&r1=986165&r2=986166&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifier.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifier.java Tue Aug 17 01:57:22 2010
@@ -69,11 +69,25 @@ public class DBIdentifier extends Identi
      */
     public static final DBIdentifier NULL = new DBIdentifier(DBIdentifierType.NULL);
     
+    public boolean _ignoreCase = false;
+    
     // All constructors are protected or private.  Static factory operations
     // should be used to construct new identifiers.
     protected DBIdentifier() {
     }
 
+    /**
+     * Returns whether case is ignored during equality operations.
+     * @return
+     */
+    public boolean getIgnoreCase() {
+        return _ignoreCase;
+    }
+    
+    public void setIgnoreCase(boolean ignoreCase) {
+        _ignoreCase = ignoreCase;
+    }
+
     private DBIdentifier(DBIdentifierType type) {
         setType(type);
     }
@@ -310,6 +324,7 @@ public class DBIdentifier extends Identi
         DBIdentifier sName = new DBIdentifier();
         sName.setNameInternal(getNameInternal());
         sName.setType(getType());
+        sName.setIgnoreCase(getIgnoreCase());
         return sName;
     }
     
@@ -358,7 +373,7 @@ public class DBIdentifier extends Identi
         }
         if (obj instanceof DBIdentifier) {
             DBIdentifier sName = (DBIdentifier)obj;
-            return this.equals(sName, false);
+            return this.equals(sName, getIgnoreCase() || sName.getIgnoreCase());
         } else if (obj instanceof String) {
             return obj.equals(this.getNameInternal());
         }
@@ -596,6 +611,15 @@ public class DBIdentifier extends Identi
      * name an type. Optionally, converting the name to upper case and delimiting it.
      */
     protected static DBIdentifier newIdentifier(String name, DBIdentifierType id, boolean toUpper, boolean delimit) {
+        return newIdentifier(name,id, toUpper, delimit, false);
+    }
+
+    /**
+     * Constructs a new identifier (potentially a compound QualifiedDBIdentifier) with the provided 
+     * name an type. Optionally, converting the name to upper case and delimiting it.
+     */
+    protected static DBIdentifier newIdentifier(String name, DBIdentifierType id, boolean toUpper, boolean delimit,
+        boolean ignoreCase) {
         if (name == null) {
             return DBIdentifier.NULL;
         }
@@ -604,6 +628,7 @@ public class DBIdentifier extends Identi
         // Create a DBIDentifier for single component names.  Otherwise, create a QualifiedDBIdentifier.
         if (!_compoundIdentifier[id.ordinal()] || delimit) {
             dbId = new DBIdentifier(name, id, delimit);
+            dbId.setIgnoreCase(ignoreCase);
             if (toUpper) {
                 return toUpper(dbId);
             }
@@ -611,6 +636,7 @@ public class DBIdentifier extends Identi
             // Name can be split. Break it up into components and return a path
             DBIdentifier[] sNames = DBIdentifier.split(id, name);
             dbId = new QualifiedDBIdentifier(sNames);
+            dbId.setIgnoreCase(ignoreCase);
         }
         return dbId;
     }
@@ -814,7 +840,8 @@ public class DBIdentifier extends Identi
         if (getNameInternal() == null) {
             return false;
         }
-        if (ignoreCase || !Normalizer.isDelimited(getNameInternal())) {
+        if (getIgnoreCase() || sName.getIgnoreCase() ||
+            ignoreCase || !Normalizer.isDelimited(getNameInternal())) {
             return getNameInternal().equalsIgnoreCase(sName.getNameInternal());
         }
         return getNameInternal().equals(sName.getNameInternal());

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifierUtilImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifierUtilImpl.java?rev=986166&r1=986165&r2=986166&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifierUtilImpl.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifierUtilImpl.java Tue Aug 17 01:57:22 2010
@@ -285,7 +285,7 @@ public class DBIdentifierUtilImpl extend
         // case or try to determine whether delimiting is required.  Let the
         // normalizer figure it out using standard rules.
         if (delimCase.equals(nonDelimCase)) {
-            return DBIdentifier.newIdentifier(name, id, false, false);
+            return DBIdentifier.newIdentifier(name, id, false, false, !delimCase.equals(CASE_PRESERVE));
         }
         
         // Otherwise, try to determine whether to delimit based on an expected vs.
@@ -307,7 +307,8 @@ public class DBIdentifierUtilImpl extend
         }
         
         boolean delimit = !caseName.equals(name) || getIdentifierConfiguration().delimitAll();
-        return DBIdentifier.newIdentifier((delimit ? name : caseName), id, false, delimit);
+        return DBIdentifier.newIdentifier((delimit ? name : caseName), id, false, delimit, 
+            !delimCase.equals(CASE_PRESERVE));
     }
 
     public DBIdentifier append(DBIdentifierType resultId, DBIdentifier...names) {

Modified: openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/QualifiedDBIdentifier.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/QualifiedDBIdentifier.java?rev=986166&r1=986165&r2=986166&view=diff
==============================================================================
--- openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/QualifiedDBIdentifier.java (original)
+++ openjpa/trunk/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/QualifiedDBIdentifier.java Tue Aug 17 01:57:22 2010
@@ -353,6 +353,7 @@ public class QualifiedDBIdentifier exten
         sPath.setSchemaName(getSchemaName().clone());
         sPath.setBaseName(super.getName());
         sPath.setType(getType());
+        sPath.setIgnoreCase(getIgnoreCase());
         return sPath;
     }
 

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierImpl.java?rev=986166&r1=986165&r2=986166&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierImpl.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierImpl.java Tue Aug 17 01:57:22 2010
@@ -49,7 +49,7 @@ public class IdentifierImpl implements I
         if (_name == null) {
             return super.hashCode();
         }
-        return _name.hashCode();
+        return _name.toUpperCase().hashCode();
     }
 
     public int length() {