You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ka...@apache.org on 2008/08/18 21:08:51 UTC

svn commit: r686849 - in /directory/apacheds/branches/bigbang/jdbm-store/src: main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java

Author: kayyagari
Date: Mon Aug 18 12:08:47 2008
New Revision: 686849

URL: http://svn.apache.org/viewvc?rev=686849&view=rev
Log:
fixed a bug ( DIRSERVER-1211 ) related to modify-replace operation on an indexed attribute whose value is not present 
in the index

Modified:
    directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
    directory/apacheds/branches/bigbang/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java

Modified: directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java?rev=686849&r1=686848&r2=686849&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java (original)
+++ directory/apacheds/branches/bigbang/jdbm-store/src/main/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStore.java Mon Aug 18 12:08:47 2008
@@ -1391,8 +1391,11 @@
         {
             Index<?,E> index = getUserIndex( modsOid );
 
-            // Drop all existing attribute value index entries and add new ones
-            ( ( JdbmIndex<?,E> ) index ).drop( id );
+            // if the id exists in the index drop all existing attribute value index entries and add new ones
+            if( index.reverse( id ) )
+            {
+                ( ( JdbmIndex<?,E> ) index ).drop( id );
+            }
             
             for ( Value<?> value : mods )
             {

Modified: directory/apacheds/branches/bigbang/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java?rev=686849&r1=686848&r2=686849&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java (original)
+++ directory/apacheds/branches/bigbang/jdbm-store/src/test/java/org/apache/directory/server/core/partition/impl/btree/jdbm/JdbmStoreTest.java Mon Aug 18 12:08:47 2008
@@ -869,4 +869,33 @@
         assertNull( lookedup.get( "sn" ) );
     }
 
+    
+    @Test
+    public void testModifyReplaceNonExistingIndexAttribute() throws Exception
+    {
+        LdapDN dn = new LdapDN( "cn=Tim B,ou=Sales,o=Good Times Co." );
+        dn.normalize( attributeRegistry.getNormalizerMapping() );
+        DefaultServerEntry entry = new DefaultServerEntry( registries, dn );
+        entry.add( "objectClass", "top", "person", "organizationalPerson" );
+        entry.add( "cn", "Tim B");
+        
+        store.add( dn, entry );
+        
+        List<Modification> mods = new ArrayList<Modification>();
+        ServerAttribute attrib = new DefaultServerAttribute( SchemaConstants.OU_AT,
+            attributeRegistry.lookup( SchemaConstants.OU_AT_OID ) );
+        
+        String attribVal = "Marketing";
+        attrib.add( attribVal );
+        
+        Modification add = new ServerModification( ModificationOperation.REPLACE_ATTRIBUTE, attrib );
+        mods.add( add );
+        
+        ServerEntry lookedup = store.lookup( store.getEntryId( dn.toNormName() ) );
+        
+        assertNull( lookedup.get( "ou" ) ); // before replacing
+        
+        store.modify( dn, mods );
+        assertEquals( attribVal, lookedup.get( "ou" ).get().get() );
+    }
 }