1 /* filterindex.c - generate the list of candidate entries from a filter */
3 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 * Copyright 2000-2004 The OpenLDAP Foundation.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted only as authorized by the OpenLDAP
12 * A copy of this license is available in the file LICENSE in the
13 * top-level directory of the distribution or, alternatively, at
14 * <http://www.OpenLDAP.org/license.html>.
20 #include <ac/string.h>
25 static int presence_candidates(
27 AttributeDescription *desc,
30 static int equality_candidates(
32 AttributeAssertion *ava,
35 static int approx_candidates(
37 AttributeAssertion *ava,
40 static int substring_candidates(
42 SubstringsAssertion *sub,
46 static int list_candidates(
55 bdb_filter_candidates(
64 LDAP_LOG ( INDEX, ENTRY, "=> bdb_filter_candidates\n", 0, 0, 0 );
66 Debug( LDAP_DEBUG_FILTER, "=> bdb_filter_candidates\n", 0, 0, 0 );
69 char *subtree="SUBTREE";
72 switch ( f->f_choice ) {
73 case SLAPD_FILTER_COMPUTED:
74 switch( f->f_result ) {
75 case SLAPD_COMPARE_UNDEFINED:
76 /* This technically is not the same as FALSE, but it
77 * certainly will produce no matches.
80 case LDAP_COMPARE_FALSE:
83 case LDAP_COMPARE_TRUE: {
84 struct bdb_info *bdb = (struct bdb_info *)op->o_bd->be_private;
85 BDB_IDL_ALL( bdb, ids );
88 /* this is a pre-computed scope, leave it alone */
92 #if 0 /* Not used any more, search calls bdb_dn2idl directly */
93 case SLAPD_FILTER_DN_ONE:
95 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tDN ONE\n",
98 Debug( LDAP_DEBUG_FILTER, "\tDN ONE\n", 0, 0, 0 );
100 rc = bdb_dn2idl( op->o_bd, f->f_dn, DN_ONE_PREFIX, ids,
101 stack, op->o_tmpmemctx );
102 if( rc == DB_NOTFOUND ) {
108 case SLAPD_FILTER_DN_CHILDREN:
111 case SLAPD_FILTER_DN_SUBTREE:
113 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tDN %s\n",
116 Debug( LDAP_DEBUG_FILTER, "\tDN %s\n",
119 rc = bdb_dn2idl( op->o_bd, f->f_dn, DN_SUBTREE_PREFIX, ids,
120 stack, op->o_tmpmemctx );
123 case LDAP_FILTER_PRESENT:
125 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tPRESENT\n",
128 Debug( LDAP_DEBUG_FILTER, "\tPRESENT\n", 0, 0, 0 );
130 rc = presence_candidates( op, f->f_desc, ids );
133 case LDAP_FILTER_EQUALITY:
135 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tEQUALITY\n",
138 Debug( LDAP_DEBUG_FILTER, "\tEQUALITY\n", 0, 0, 0 );
140 rc = equality_candidates( op, f->f_ava, ids, tmp );
143 case LDAP_FILTER_APPROX:
145 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tAPPROX\n",
148 Debug( LDAP_DEBUG_FILTER, "\tAPPROX\n", 0, 0, 0 );
150 rc = approx_candidates( op, f->f_ava, ids, tmp );
153 case LDAP_FILTER_SUBSTRINGS:
155 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tSUBSTRINGS\n",
158 Debug( LDAP_DEBUG_FILTER, "\tSUBSTRINGS\n", 0, 0, 0 );
160 rc = substring_candidates( op, f->f_sub, ids, tmp );
164 /* no GE index, use pres */
166 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tGE\n",
169 Debug( LDAP_DEBUG_FILTER, "\tGE\n", 0, 0, 0 );
171 rc = presence_candidates( op, f->f_ava->aa_desc, ids );
175 /* no LE index, use pres */
177 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tLE\n",
180 Debug( LDAP_DEBUG_FILTER, "\tLE\n", 0, 0, 0 );
182 rc = presence_candidates( op, f->f_ava->aa_desc, ids );
185 case LDAP_FILTER_NOT:
186 /* no indexing to support NOT filters */
188 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tNOT\n",
191 Debug( LDAP_DEBUG_FILTER, "\tNOT\n", 0, 0, 0 );
193 { struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
194 BDB_IDL_ALL( bdb, ids );
198 case LDAP_FILTER_AND:
200 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tAND\n",
203 Debug( LDAP_DEBUG_FILTER, "\tAND\n", 0, 0, 0 );
205 rc = list_candidates( op,
206 f->f_and, LDAP_FILTER_AND, ids, tmp, stack );
211 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tOR\n",
214 Debug( LDAP_DEBUG_FILTER, "\tOR\n", 0, 0, 0 );
216 rc = list_candidates( op,
217 f->f_or, LDAP_FILTER_OR, ids, tmp, stack );
222 LDAP_LOG ( INDEX, ARGS, "=> bdb_filter_candidates: \tUNKNOWN\n",
225 Debug( LDAP_DEBUG_FILTER, "\tUNKNOWN %lu\n",
226 (unsigned long) f->f_choice, 0, 0 );
228 /* Must not return NULL, otherwise extended filters break */
229 { struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
230 BDB_IDL_ALL( bdb, ids );
235 LDAP_LOG ( INDEX, RESULTS,
236 "<= bdb_filter_candidates: id=%ld first=%ld last=%ld\n",
237 (long)ids[0], (long)BDB_IDL_FIRST( ids ), (long) BDB_IDL_LAST( ids ));
239 Debug( LDAP_DEBUG_FILTER,
240 "<= bdb_filter_candidates: id=%ld first=%ld last=%ld\n",
242 (long) BDB_IDL_FIRST( ids ),
243 (long) BDB_IDL_LAST( ids ) );
258 struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
263 LDAP_LOG ( INDEX, ARGS, "=> bdb_list_candidates: 0x%x\n", ftype, 0 , 0 );
265 Debug( LDAP_DEBUG_FILTER, "=> bdb_list_candidates 0x%x\n", ftype, 0, 0 );
267 for ( f = flist; f != NULL; f = f->f_next ) {
268 /* ignore precomputed scopes */
269 if ( f->f_choice == SLAPD_FILTER_COMPUTED &&
270 f->f_result == LDAP_SUCCESS ) {
273 BDB_IDL_ZERO( save );
274 rc = bdb_filter_candidates( op, f, save, tmp,
275 save+BDB_IDL_UM_SIZE );
278 if ( ftype == LDAP_FILTER_AND ) {
286 if ( ftype == LDAP_FILTER_AND ) {
288 BDB_IDL_CPY( ids, save );
290 bdb_idl_intersection( ids, save );
292 if( BDB_IDL_IS_ZERO( ids ) )
296 BDB_IDL_CPY( ids, save );
298 bdb_idl_union( ids, save );
303 if( rc == LDAP_SUCCESS ) {
305 LDAP_LOG ( INDEX, RESULTS,
306 "<= bdb_list_candidates: id=%ld first=%ld last=%ld\n",
307 (long) ids[0], (long) BDB_IDL_FIRST( ids ),
308 (long) BDB_IDL_LAST( ids ) );
310 Debug( LDAP_DEBUG_FILTER,
311 "<= bdb_list_candidates: id=%ld first=%ld last=%ld\n",
313 (long) BDB_IDL_FIRST(ids),
314 (long) BDB_IDL_LAST(ids) );
319 LDAP_LOG ( INDEX, ARGS, "<= bdb_list_candidates: rc=%d\n", rc, 0, 0 );
321 Debug( LDAP_DEBUG_FILTER,
322 "<= bdb_list_candidates: undefined rc=%d\n",
333 AttributeDescription *desc,
336 struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
340 struct berval prefix = {0, NULL};
343 LDAP_LOG ( INDEX, ENTRY, "=> bdb_presence_candidates (%s)\n",
344 desc->ad_cname.bv_val, 0, 0 );
346 Debug( LDAP_DEBUG_TRACE, "=> bdb_presence_candidates (%s)\n",
347 desc->ad_cname.bv_val, 0, 0 );
350 BDB_IDL_ALL( bdb, ids );
352 if( desc == slap_schema.si_ad_objectClass ) {
356 rc = bdb_index_param( op->o_bd, desc, LDAP_FILTER_PRESENT,
357 &db, &mask, &prefix );
359 if( rc != LDAP_SUCCESS ) {
361 LDAP_LOG ( INDEX, RESULTS,
362 "<= bdb_presence_candidates: (%s) index_param "
364 desc->ad_cname.bv_val, rc, 0 );
366 Debug( LDAP_DEBUG_TRACE,
367 "<= bdb_presence_candidates: (%s) index_param "
369 desc->ad_cname.bv_val, rc, 0 );
377 LDAP_LOG(INDEX, RESULTS,
378 "<= bdb_presence_candidates: (%s) not indexed\n",
379 desc->ad_cname.bv_val, 0, 0 );
381 Debug( LDAP_DEBUG_TRACE,
382 "<= bdb_presence_candidates: (%s) not indexed\n",
383 desc->ad_cname.bv_val, 0, 0 );
388 if( prefix.bv_val == NULL ) {
390 LDAP_LOG(INDEX, RESULTS,
391 "<= bdb_presence_candidates: (%s) no prefix\n",
392 desc->ad_cname.bv_val, 0, 0 );
394 Debug( LDAP_DEBUG_TRACE,
395 "<= bdb_presence_candidates: (%s) no prefix\n",
396 desc->ad_cname.bv_val, 0, 0 );
401 rc = bdb_key_read( op->o_bd, db, NULL, &prefix, ids );
403 if( rc == DB_NOTFOUND ) {
406 } else if( rc != LDAP_SUCCESS ) {
408 LDAP_LOG ( INDEX, RESULTS,
409 "<= bdb_presence_candidates: (%s) "
410 "key read failed (%d)\n",
411 desc->ad_cname.bv_val, rc, 0 );
413 Debug( LDAP_DEBUG_TRACE,
414 "<= bdb_presense_candidates: (%s) "
415 "key read failed (%d)\n",
416 desc->ad_cname.bv_val, rc, 0 );
422 LDAP_LOG ( INDEX, RESULTS,
423 "<= bdb_presence_candidates: id=%ld first=%ld last=%ld\n",
424 (long)ids[0], (long)BDB_IDL_FIRST( ids ), (long)BDB_IDL_LAST( ids ) );
426 Debug(LDAP_DEBUG_TRACE,
427 "<= bdb_presence_candidates: id=%ld first=%ld last=%ld\n",
429 (long) BDB_IDL_FIRST(ids),
430 (long) BDB_IDL_LAST(ids) );
440 AttributeAssertion *ava,
444 struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
449 struct berval prefix = {0, NULL};
450 struct berval *keys = NULL;
454 LDAP_LOG ( INDEX, ENTRY, "=> bdb_equality_candidates (%s)\n",
455 ava->aa_desc->ad_cname.bv_val, 0, 0 );
457 Debug( LDAP_DEBUG_TRACE, "=> bdb_equality_candidates (%s)\n",
458 ava->aa_desc->ad_cname.bv_val, 0, 0 );
461 BDB_IDL_ALL( bdb, ids );
463 rc = bdb_index_param( op->o_bd, ava->aa_desc, LDAP_FILTER_EQUALITY,
464 &db, &mask, &prefix );
466 if( rc != LDAP_SUCCESS ) {
468 LDAP_LOG ( INDEX, RESULTS,
469 "<= bdb_equality_candidates: (%s) "
470 "index_param failed (%d)\n",
471 ava->aa_desc->ad_cname.bv_val, rc, 0);
473 Debug( LDAP_DEBUG_ANY,
474 "<= bdb_equality_candidates: (%s) "
475 "index_param failed (%d)\n",
476 ava->aa_desc->ad_cname.bv_val, rc, 0 );
483 LDAP_LOG(INDEX, RESULTS,
484 "<= bdb_equality_candidates: (%s) not indexed\n",
485 ava->aa_desc->ad_cname.bv_val, 0, 0 );
487 Debug( LDAP_DEBUG_ANY,
488 "<= bdb_equality_candidates: (%s) not indexed\n",
489 ava->aa_desc->ad_cname.bv_val, 0, 0 );
494 mr = ava->aa_desc->ad_type->sat_equality;
499 if( !mr->smr_filter ) {
503 rc = (mr->smr_filter)(
504 LDAP_FILTER_EQUALITY,
506 ava->aa_desc->ad_type->sat_syntax,
510 &keys, op->o_tmpmemctx );
512 if( rc != LDAP_SUCCESS ) {
514 LDAP_LOG ( INDEX, RESULTS,
515 "<= bdb_equality_candidates: (%s, %s) "
516 "MR filter failed (%d)\n",
517 prefix.bv_val, ava->aa_desc->ad_cname.bv_val, rc );
519 Debug( LDAP_DEBUG_TRACE,
520 "<= bdb_equality_candidates: (%s, %s) "
521 "MR filter failed (%d)\n",
522 prefix.bv_val, ava->aa_desc->ad_cname.bv_val, rc );
529 LDAP_LOG ( INDEX, RESULTS,
530 "<= bdb_equality_candidates: (%s) no keys\n",
531 ava->aa_desc->ad_cname.bv_val, 0, 0 );
533 Debug( LDAP_DEBUG_TRACE,
534 "<= bdb_equality_candidates: (%s) no keys\n",
535 ava->aa_desc->ad_cname.bv_val, 0, 0 );
540 for ( i= 0; keys[i].bv_val != NULL; i++ ) {
541 rc = bdb_key_read( op->o_bd, db, NULL, &keys[i], tmp );
543 if( rc == DB_NOTFOUND ) {
547 } else if( rc != LDAP_SUCCESS ) {
549 LDAP_LOG ( INDEX, RESULTS,
550 "<= bdb_equality_candidates: (%s) "
551 "key read failed (%d)\n",
552 ava->aa_desc->ad_cname.bv_val, rc, 0 );
554 Debug( LDAP_DEBUG_TRACE,
555 "<= bdb_equality_candidates: (%s) "
556 "key read failed (%d)\n",
557 ava->aa_desc->ad_cname.bv_val, rc, 0 );
562 if( BDB_IDL_IS_ZERO( tmp ) ) {
564 LDAP_LOG ( INDEX, RESULTS,
565 "<= bdb_equality_candidates: (%s) NULL\n",
566 ava->aa_desc->ad_cname.bv_val, 0, 0);
568 Debug( LDAP_DEBUG_TRACE,
569 "<= bdb_equality_candidates: (%s) NULL\n",
570 ava->aa_desc->ad_cname.bv_val, 0, 0 );
577 BDB_IDL_CPY( ids, tmp );
579 bdb_idl_intersection( ids, tmp );
582 if( BDB_IDL_IS_ZERO( ids ) )
586 ber_bvarray_free_x( keys, op->o_tmpmemctx );
589 LDAP_LOG ( INDEX, RESULTS,
590 "<= bdb_equality_candidates: id=%ld first=%ld last=%ld\n",
591 (long) ids[0], (long) BDB_IDL_FIRST( ids ),
592 (long) BDB_IDL_LAST( ids ) );
594 Debug( LDAP_DEBUG_TRACE,
595 "<= bdb_equality_candidates: id=%ld, first=%ld, last=%ld\n",
597 (long) BDB_IDL_FIRST(ids),
598 (long) BDB_IDL_LAST(ids) );
607 AttributeAssertion *ava,
611 struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
616 struct berval prefix = {0, NULL};
617 struct berval *keys = NULL;
621 LDAP_LOG ( INDEX, ENTRY, "=> bdb_approx_candidates (%s)\n",
622 ava->aa_desc->ad_cname.bv_val, 0, 0 );
624 Debug( LDAP_DEBUG_TRACE, "=> bdb_approx_candidates (%s)\n",
625 ava->aa_desc->ad_cname.bv_val, 0, 0 );
628 BDB_IDL_ALL( bdb, ids );
630 rc = bdb_index_param( op->o_bd, ava->aa_desc, LDAP_FILTER_APPROX,
631 &db, &mask, &prefix );
633 if( rc != LDAP_SUCCESS ) {
635 LDAP_LOG ( INDEX, RESULTS,
636 "<= bdb_approx_candidates: (%s) "
637 "index_param failed (%d)\n",
638 ava->aa_desc->ad_cname.bv_val, rc, 0 );
640 Debug( LDAP_DEBUG_ANY,
641 "<= bdb_approx_candidates: (%s) "
642 "index_param failed (%d)\n",
643 ava->aa_desc->ad_cname.bv_val, rc, 0 );
650 LDAP_LOG(INDEX, RESULTS,
651 "<= bdb_approx_candidates: (%s) not indexed\n",
652 ava->aa_desc->ad_cname.bv_val, 0, 0 );
654 Debug( LDAP_DEBUG_ANY,
655 "<= bdb_approx_candidates: (%s) not indexed\n",
656 ava->aa_desc->ad_cname.bv_val, 0, 0 );
661 mr = ava->aa_desc->ad_type->sat_approx;
663 /* no approx matching rule, try equality matching rule */
664 mr = ava->aa_desc->ad_type->sat_equality;
671 if( !mr->smr_filter ) {
675 rc = (mr->smr_filter)(
678 ava->aa_desc->ad_type->sat_syntax,
682 &keys, op->o_tmpmemctx );
684 if( rc != LDAP_SUCCESS ) {
686 LDAP_LOG ( INDEX, RESULTS,
687 "<= bdb_approx_candidates: (%s, %s) "
688 "MR filter failed (%d)\n",
689 prefix.bv_val, ava->aa_desc->ad_cname.bv_val, rc );
691 Debug( LDAP_DEBUG_TRACE,
692 "<= bdb_approx_candidates: (%s, %s) "
693 "MR filter failed (%d)\n",
694 prefix.bv_val, ava->aa_desc->ad_cname.bv_val, rc );
701 LDAP_LOG ( INDEX, RESULTS,
702 "<= bdb_approx_candidates: (%s) no keys (%s)\n",
703 prefix.bv_val, ava->aa_desc->ad_cname.bv_val, 0 );
705 Debug( LDAP_DEBUG_TRACE,
706 "<= bdb_approx_candidates: (%s) no keys (%s)\n",
707 prefix.bv_val, ava->aa_desc->ad_cname.bv_val, 0 );
712 for ( i= 0; keys[i].bv_val != NULL; i++ ) {
713 rc = bdb_key_read( op->o_bd, db, NULL, &keys[i], tmp );
715 if( rc == DB_NOTFOUND ) {
719 } else if( rc != LDAP_SUCCESS ) {
721 LDAP_LOG ( INDEX, RESULTS,
722 "<= bdb_approx_candidates: (%s) "
723 "key read failed (%d)\n",
724 ava->aa_desc->ad_cname.bv_val, rc, 0);
726 Debug( LDAP_DEBUG_TRACE,
727 "<= bdb_approx_candidates: (%s) "
728 "key read failed (%d)\n",
729 ava->aa_desc->ad_cname.bv_val, rc, 0 );
734 if( BDB_IDL_IS_ZERO( tmp ) ) {
736 LDAP_LOG ( INDEX, RESULTS,
737 "<= bdb_approx_candidates: (%s) NULL\n",
738 ava->aa_desc->ad_cname.bv_val, 0, 0 );
740 Debug( LDAP_DEBUG_TRACE,
741 "<= bdb_approx_candidates: (%s) NULL\n",
742 ava->aa_desc->ad_cname.bv_val, 0, 0 );
749 BDB_IDL_CPY( ids, tmp );
751 bdb_idl_intersection( ids, tmp );
754 if( BDB_IDL_IS_ZERO( ids ) )
758 ber_bvarray_free_x( keys, op->o_tmpmemctx );
761 LDAP_LOG ( INDEX, RESULTS,
762 "<= bdb_approx_candidates: id=%ld first=%ld last=%ld\n",
763 (long) ids[0], (long) BDB_IDL_FIRST( ids ),
764 (long) BDB_IDL_LAST( ids ) );
766 Debug( LDAP_DEBUG_TRACE, "<= bdb_approx_candidates %ld, first=%ld, last=%ld\n",
768 (long) BDB_IDL_FIRST(ids),
769 (long) BDB_IDL_LAST(ids) );
775 substring_candidates(
777 SubstringsAssertion *sub,
781 struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
786 struct berval prefix = {0, NULL};
787 struct berval *keys = NULL;
791 LDAP_LOG ( INDEX, ENTRY, "=> bdb_substring_candidates (%s)\n",
792 sub->sa_desc->ad_cname.bv_val, 0, 0 );
794 Debug( LDAP_DEBUG_TRACE, "=> bdb_substring_candidates (%s)\n",
795 sub->sa_desc->ad_cname.bv_val, 0, 0 );
798 BDB_IDL_ALL( bdb, ids );
800 rc = bdb_index_param( op->o_bd, sub->sa_desc, LDAP_FILTER_SUBSTRINGS,
801 &db, &mask, &prefix );
803 if( rc != LDAP_SUCCESS ) {
805 LDAP_LOG ( INDEX, RESULTS,
806 "<= bdb_substring_candidates: (%s) "
807 "index_param failed (%d)\n",
808 sub->sa_desc->ad_cname.bv_val, rc, 0);
810 Debug( LDAP_DEBUG_ANY,
811 "<= bdb_substring_candidates: (%s) "
812 "index_param failed (%d)\n",
813 sub->sa_desc->ad_cname.bv_val, rc, 0 );
820 LDAP_LOG ( INDEX, RESULTS,
821 "<= bdb_substring_candidates: (%s) not indexed\n",
822 sub->sa_desc->ad_cname.bv_val, 0, 0 );
824 Debug( LDAP_DEBUG_ANY,
825 "<= bdb_substring_candidates: (%s) not indexed\n",
826 sub->sa_desc->ad_cname.bv_val, 0, 0 );
831 mr = sub->sa_desc->ad_type->sat_substr;
837 if( !mr->smr_filter ) {
841 rc = (mr->smr_filter)(
842 LDAP_FILTER_SUBSTRINGS,
844 sub->sa_desc->ad_type->sat_syntax,
848 &keys, op->o_tmpmemctx );
850 if( rc != LDAP_SUCCESS ) {
852 LDAP_LOG ( INDEX, RESULTS,
853 "<= bdb_substring_candidates: (%s) "
854 "MR filter failed (%d)\n",
855 sub->sa_desc->ad_cname.bv_val, rc, 0 );
857 Debug( LDAP_DEBUG_TRACE,
858 "<= bdb_substring_candidates: (%s) "
859 "MR filter failed (%d)\n",
860 sub->sa_desc->ad_cname.bv_val, rc, 0 );
867 LDAP_LOG ( INDEX, RESULTS,
868 "<= bdb_substring_candidates: (0x%04lx) no keys (%s)\n",
869 mask, sub->sa_desc->ad_cname.bv_val, 0 );
871 Debug( LDAP_DEBUG_TRACE,
872 "<= bdb_substring_candidates: (0x%04lx) no keys (%s)\n",
873 mask, sub->sa_desc->ad_cname.bv_val, 0 );
878 for ( i= 0; keys[i].bv_val != NULL; i++ ) {
879 rc = bdb_key_read( op->o_bd, db, NULL, &keys[i], tmp );
881 if( rc == DB_NOTFOUND ) {
885 } else if( rc != LDAP_SUCCESS ) {
887 LDAP_LOG ( INDEX, RESULTS,
888 "<= bdb_substring_candidates: (%s) "
889 "key read failed (%d)\n",
890 sub->sa_desc->ad_cname.bv_val, rc, 0 );
892 Debug( LDAP_DEBUG_TRACE,
893 "<= bdb_substring_candidates: (%s) "
894 "key read failed (%d)\n",
895 sub->sa_desc->ad_cname.bv_val, rc, 0 );
900 if( BDB_IDL_IS_ZERO( tmp ) ) {
902 LDAP_LOG ( INDEX, RESULTS,
903 "<= bdb_substring_candidates: (%s) NULL\n",
904 sub->sa_desc->ad_cname.bv_val, 0, 0 );
906 Debug( LDAP_DEBUG_TRACE,
907 "<= bdb_substring_candidates: (%s) NULL\n",
908 sub->sa_desc->ad_cname.bv_val, 0, 0 );
915 BDB_IDL_CPY( ids, tmp );
917 bdb_idl_intersection( ids, tmp );
920 if( BDB_IDL_IS_ZERO( ids ) )
924 ber_bvarray_free_x( keys, op->o_tmpmemctx );
927 LDAP_LOG ( INDEX, RESULTS,
928 "<= bdb_substring_candidates: id=%ld first=%ld last=%ld\n",
929 (long) ids[0], (long) BDB_IDL_FIRST( ids ),
930 (long) BDB_IDL_LAST( ids ) );
932 Debug( LDAP_DEBUG_TRACE, "<= bdb_substring_candidates: %ld, first=%ld, last=%ld\n",
934 (long) BDB_IDL_FIRST(ids),
935 (long) BDB_IDL_LAST(ids) );