- rc = cursor->c_close( cursor );
- }
-#else /* !BDB_IDL_MULTI */
- data.data = ids;
- data.ulen = sizeof ids;
- data.flags = DB_DBT_USERMEM;
-
- /* fetch the key for read/modify/write */
- rc = db->get( db, tid, key, &data, DB_RMW | bdb->bi_db_opflags );
-
- if( rc == DB_NOTFOUND ) {
- ids[0] = 1;
- ids[1] = id;
- data.size = 2 * sizeof( ID );
-
- } else if ( rc != 0 ) {
-#ifdef NEW_LOGGING
- LDAP_LOG( INDEX, ERR, "bdb_idl_insert_key: get failed: %s (%d)\n",
- db_strerror(rc), rc, 0 );
-#else
- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_insert_key: "
- "get failed: %s (%d)\n",
- db_strerror(rc), rc, 0 );
-#endif
- return rc;
-
- } else if ( data.size == 0 || data.size % sizeof( ID ) ) {
- /* size not multiple of ID size */
-#ifdef NEW_LOGGING
- LDAP_LOG( INDEX, ERR,
- "bdb_idl_insert_key: odd size: expected %ld multiple, got %ld\n",
- (long) sizeof( ID ), (long) data.size, 0 );
-#else
- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_insert_key: "
- "odd size: expected %ld multiple, got %ld\n",
- (long) sizeof( ID ), (long) data.size, 0 );
-#endif
- return -1;
-
- } else if ( data.size != BDB_IDL_SIZEOF(ids) ) {
- /* size mismatch */
-#ifdef NEW_LOGGING
- LDAP_LOG( INDEX, ERR,
- "bdb_idl_insert_key: odd size: expected %ld multiple, got %ld\n",
- (long) ((1 + ids[0]) * sizeof( ID )), (long) data.size, 0 );
-#else
- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_insert_key: "
- "get size mismatch: expected %ld, got %ld\n",
- (long) ((1 + ids[0]) * sizeof( ID )), (long) data.size, 0 );
-#endif
- return -1;
-
- } else if ( BDB_IDL_IS_RANGE(ids) ) {
- if( id < ids[1] ) {
- ids[1] = id;
- } else if ( ids[2] > id ) {
- ids[2] = id;
- } else {
- return 0;