From d5647701567a16bb7f42454f971d24e7e53aea49 Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Wed, 16 Apr 2003 20:54:56 +0000 Subject: [PATCH] clarify hasSubordinate filtering --- servers/slapd/back-sql/search.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/servers/slapd/back-sql/search.c b/servers/slapd/back-sql/search.c index f1cc0ada09..feee0efcd8 100644 --- a/servers/slapd/back-sql/search.c +++ b/servers/slapd/back-sql/search.c @@ -400,15 +400,19 @@ backsql_process_filter( backsql_srch_info *bsi, Filter *f ) * Note however that hasSubordinates is boolean, * so a more appropriate filter would be * '(hasSubordinates=FALSE)' + * + * A more robust search for hasSubordinates + * would * require joining the ldap_entries table + * selecting if there are descendants of the + * candidate. */ backsql_strfcat( &bsi->flt_where, "l", (ber_len_t)sizeof( "1=1" ) - 1, "1=1" ); if ( ad == slap_schema.si_ad_hasSubordinates ) { /* - * We use this flag since we need to parse - * the filter anyway; we should have used - * the frontend API function - * filter_has_subordinates() + * instruct candidate selection algorithm + * and attribute list to try to detect + * if an entry has subordinates */ bsi->bsi_flags |= BSQL_SF_FILTER_HASSUBORDINATE; @@ -448,20 +452,6 @@ backsql_process_filter( backsql_srch_info *bsi, Filter *f ) &at->join_where ); } -#if 0 - /* - * FIXME: this is not required any more; however, note that - * attribute name syntax might collide with SQL legal aliases - */ - if ( at != &oc_attr ) { - backsql_strfcat( &bsi->sel, "cblb", - ',', - &at->sel_expr, - (ber_len_t)sizeof( " AS " ) - 1, " AS ", - &at->name ); - } -#endif - switch ( f->f_choice ) { case LDAP_FILTER_EQUALITY: filter_value = &f->f_av_value; -- 2.39.5