From 0df28b32026c9de2eeada877df13ae99152efde2 Mon Sep 17 00:00:00 2001
From: neil_a_wilson <neil_a_wilson@localhost>
Date: Thu, 15 Feb 2007 00:21:49 +0000
Subject: [PATCH] Rewrite the DN and RDN code for significant performance improvements, especially in the area of DN parsing.

---
 opends/src/server/org/opends/server/backends/jeb/EntryContainer.java |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java b/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
index 97388e7..b8a5a52 100644
--- a/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
+++ b/opends/src/server/org/opends/server/backends/jeb/EntryContainer.java
@@ -22,7 +22,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2006 Sun Microsystems, Inc.
+ *      Portions Copyright 2006-2007 Sun Microsystems, Inc.
  */
 package org.opends.server.backends.jeb;
 
@@ -53,6 +53,7 @@
 import org.opends.server.types.Entry;
 import org.opends.server.types.LockType;
 import org.opends.server.types.Modification;
+import org.opends.server.types.RDN;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.SearchScope;
 import org.opends.server.util.StaticUtils;
@@ -3100,8 +3101,22 @@
    */
   public static DN modDN(DN oldDN, int oldSuffixLen, DN newSuffixDN)
   {
-    DN localName = oldDN.getLocalName(oldSuffixLen);
-    return newSuffixDN.concat(localName);
+    int oldDNNumComponents    = oldDN.getNumComponents();
+    int oldDNKeepComponents   = oldDNNumComponents - oldSuffixLen;
+    int newSuffixDNComponents = newSuffixDN.getNumComponents();
+
+    RDN[] newDNComponents = new RDN[oldDNKeepComponents+newSuffixDNComponents];
+    for (int i=0; i < oldDNKeepComponents; i++)
+    {
+      newDNComponents[i] = oldDN.getRDN(i);
+    }
+
+    for (int i=oldDNKeepComponents, j=0; j < newSuffixDNComponents; i++,j++)
+    {
+      newDNComponents[i] = newSuffixDN.getRDN(j);
+    }
+
+    return new DN(newDNComponents);
   }
 
   /**

--
Gitblit v1.10.0