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() {