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