From aab953ba3ffc8fe798dc188f595a501168a3a9af Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Fri, 19 Jul 2002 23:19:53 +0000 Subject: [PATCH] Change list->range conversion again, avoid extra c_put. --- servers/slapd/back-bdb/idl.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/servers/slapd/back-bdb/idl.c b/servers/slapd/back-bdb/idl.c index 8913404ade..09f86a7ccf 100644 --- a/servers/slapd/back-bdb/idl.c +++ b/servers/slapd/back-bdb/idl.c @@ -446,18 +446,30 @@ bdb_idl_insert_key( } if ( count >= BDB_IDL_DB_SIZE ) { /* No room, convert to a range */ + DBT key2 = *key; + + key2.dlen = key2.ulen; + key2.flags |= DB_DBT_PARTIAL; + lo = tmp; - hi = NOID; data.data = &hi; - rc = cursor->c_put( cursor, key, &data, DB_KEYLAST ); - if ( rc != 0 ) { - err = "c_put NOID"; + rc = cursor->c_get( cursor, &key2, &data, DB_NEXT_NODUP ); + if ( rc != 0 && rc != DB_NOTFOUND ) { + err = "c_get next_nodup"; goto fail; } - rc = cursor->c_get( cursor, key, &data, DB_PREV ); - if ( rc != 0 ) { - err = "c_get prev"; - goto fail; + if ( rc == DB_NOTFOUND ) { + rc = cursor->c_get( cursor, key, &data, DB_LAST ); + if ( rc != 0 ) { + err = "c_get last"; + goto fail; + } + } else { + rc = cursor->c_get( cursor, key, &data, DB_PREV ); + if ( rc != 0 ) { + err = "c_get prev"; + goto fail; + } } if ( id < lo ) lo = id; -- 2.39.5