Merge pull request #71 from eolivelli/fix/OPENJPA-2820-delim
OPENJPA-2820 Track when a DBIdentifier is already delimited in order to save memory allocations and cpu
diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifier.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifier.java
index aa1f888..255784a 100644
--- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifier.java
+++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/identifier/DBIdentifier.java
@@ -142,6 +142,7 @@
if (DBIdentifierType.CONSTANT != getType() && DBIdentifierType.COLUMN_DEFINITION != getType()) {
if (delimit) {
name = Normalizer.delimit(name, true);
+ setNameDelimited(true);
} else {
name = Normalizer.normalizeString(name);
}
@@ -325,6 +326,7 @@
sName.setNameInternal(getNameInternal());
sName.setType(getType());
sName.setIgnoreCase(getIgnoreCase());
+ sName.setNameDelimited(isNameDelimited());
return sName;
}
@@ -859,7 +861,7 @@
* @param name
*/
public static DBIdentifier removeDelimiters(DBIdentifier name) {
- if (DBIdentifier.isNull(name)) {
+ if (DBIdentifier.isNull(name) || !name.isDelimited()) {
return name;
}
if (!name.isDelimited()) {
@@ -927,7 +929,7 @@
if (DBIdentifier.isEmpty(this)) {
return false;
}
- return Normalizer.isDelimited(getNameInternal());
+ return isNameDelimited() || Normalizer.isDelimited(getNameInternal());
}
/**
diff --git a/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierImpl.java b/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierImpl.java
index 3958cd3..99a636d 100644
--- a/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierImpl.java
+++ b/openjpa-lib/src/main/java/org/apache/openjpa/lib/identifier/IdentifierImpl.java
@@ -28,6 +28,7 @@
private static final long serialVersionUID = 1L;
private String _name = null;
+ private boolean nameDelimited = false;
protected IdentifierImpl() {}
@@ -45,6 +46,14 @@
return _name;
}
+ public boolean isNameDelimited() {
+ return nameDelimited;
+ }
+
+ public void setNameDelimited(boolean nameDelimited) {
+ this.nameDelimited = nameDelimited;
+ }
+
@Override
public String toString() {
return getName();