X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-sql%2Fschema-map.c;h=6244955033b07ae2c8fff893139481c4c54277c2;hb=f26a0e0db0ee1a59fc6b256e8c9a00addda54688;hp=eaa63ab69228919cf43f04952db6cba74bc7e243;hpb=f11c6b27e7f09dc6ea476e892dbaa577cfcac843;p=openldap diff --git a/servers/slapd/back-sql/schema-map.c b/servers/slapd/back-sql/schema-map.c index eaa63ab692..6244955033 100644 --- a/servers/slapd/back-sql/schema-map.c +++ b/servers/slapd/back-sql/schema-map.c @@ -13,57 +13,39 @@ #include #include -#include +#include "ac/string.h" #include "slap.h" +#include "lber_pvt.h" #include "ldap_pvt.h" #include "back-sql.h" #include "sql-wrap.h" #include "schema-map.h" #include "util.h" -/* - * Deprecated - */ -#if 0 -static int -backsql_cmp_oc_name( backsql_oc_map_rec *m1, backsql_oc_map_rec *m2 ) -{ - return BACKSQL_NCMP( &m1->name, &m2->name ); -} -#endif - /* * Uses the pointer to the ObjectClass structure */ static int -backsql_cmp_oc( backsql_oc_map_rec *m1, backsql_oc_map_rec *m2 ) +backsql_cmp_oc( const void *v_m1, const void *v_m2 ) { + const backsql_oc_map_rec *m1 = v_m1, *m2 = v_m2; return ( m1->oc < m2->oc ? -1 : ( m1->oc > m2->oc ? 1 : 0 ) ); } static int -backsql_cmp_oc_id( backsql_oc_map_rec *m1, backsql_oc_map_rec *m2 ) +backsql_cmp_oc_id( const void *v_m1, const void *v_m2 ) { + const backsql_oc_map_rec *m1 = v_m1, *m2 = v_m2; return ( m1->id < m2->id ? -1 : ( m1->id > m2->id ? 1 : 0 ) ); } -/* - * Deprecated - */ -#if 0 -static int -backsql_cmp_attr_name( backsql_at_map_rec *m1, backsql_at_map_rec *m2 ) -{ - return BACKSQL_NCMP( &m1->name, &m2->name ); -} -#endif - /* * Uses the pointer to the AttributeDescription structure */ static int -backsql_cmp_attr( backsql_at_map_rec *m1, backsql_at_map_rec *m2 ) +backsql_cmp_attr( const void *v_m1, const void *v_m2 ) { + const backsql_at_map_rec *m1 = v_m1, *m2 = v_m2; return ( m1->ad < m2->ad ? -1 : ( m1->ad > m2->ad ? 1 : 0 ) ); } @@ -72,7 +54,7 @@ backsql_make_attr_query( backsql_oc_map_rec *oc_map, backsql_at_map_rec *at_map ) { - struct berval tmps = { 0, NULL }; + struct berval tmps = BER_BVNULL; ber_len_t tmpslen = 0; backsql_strfcat( &tmps, &tmpslen, "lblblblbcbl", @@ -137,8 +119,7 @@ backsql_add_sysmaps( backsql_oc_map_rec *oc_map ) at_map->param_order = 0; at_map->expect_return = 0; backsql_make_attr_query( oc_map, at_map ); - avl_insert( &oc_map->attrs, at_map, - (AVL_CMP)backsql_cmp_attr, NULL ); + avl_insert( &oc_map->attrs, at_map, backsql_cmp_attr, NULL ); at_map = (backsql_at_map_rec *)ch_calloc( 1, sizeof( backsql_at_map_rec ) ); @@ -166,8 +147,7 @@ backsql_add_sysmaps( backsql_oc_map_rec *oc_map ) at_map->param_order = 0; at_map->expect_return = 0; backsql_make_attr_query( oc_map, at_map ); - avl_insert( &oc_map->attrs, at_map, - (AVL_CMP)backsql_cmp_attr, NULL ); + avl_insert( &oc_map->attrs, at_map, backsql_cmp_attr, NULL ); return 1; } @@ -250,27 +230,26 @@ backsql_load_schema_map( backsql_info *si, SQLHDBC dbh ) oc_map->id = strtol( oc_row.cols[ 0 ], NULL, 0 ); - ber_str2bv( oc_row.cols[ 1 ], 0, 1, &oc_map->name ); - oc_map->oc = oc_bvfind( &oc_map->name ); + oc_map->oc = oc_find( oc_row.cols[ 1 ] ); if ( oc_map->oc == NULL ) { Debug( LDAP_DEBUG_TRACE, "load_schema_map(): " "objectClass '%s' is not defined in schema\n", - oc_map->name.bv_val, 0, 0 ); + oc_row.cols[ 1 ], 0, 0 ); return LDAP_OTHER; /* undefined objectClass ? */ } ber_str2bv( oc_row.cols[ 2 ], 0, 1, &oc_map->keytbl ); ber_str2bv( oc_row.cols[ 3 ], 0, 1, &oc_map->keycol ); - oc_map->create_proc = ( oc_row.is_null[ 4 ] < 0 ) ? NULL + oc_map->create_proc = ( oc_row.value_len[ 4 ] < 0 ) ? NULL : ch_strdup( oc_row.cols[ 4 ] ); colnum = 5; if ( BACKSQL_CREATE_NEEDS_SELECT( si ) ) { colnum = 6; - oc_map->create_keyval = ( oc_row.is_null[ 5 ] < 0 ) + oc_map->create_keyval = ( oc_row.value_len[ 5 ] < 0 ) ? NULL : ch_strdup( oc_row.cols[ 5 ] ); } - oc_map->delete_proc = ( oc_row.is_null[ colnum ] < 0 ) ? NULL + oc_map->delete_proc = ( oc_row.value_len[ colnum ] < 0 ) ? NULL : ch_strdup( oc_row.cols[ colnum ] ); oc_map->expect_return = strtol( oc_row.cols[ colnum + 1 ], NULL, 0 ); @@ -281,14 +260,12 @@ backsql_load_schema_map( backsql_info *si, SQLHDBC dbh ) */ oc_map->attrs = NULL; - avl_insert( &si->oc_by_oc, oc_map, - (AVL_CMP)backsql_cmp_oc, NULL ); - avl_insert( &si->oc_by_id, oc_map, - (AVL_CMP)backsql_cmp_oc_id, NULL ); + avl_insert( &si->oc_by_oc, oc_map, backsql_cmp_oc, NULL ); + avl_insert( &si->oc_by_id, oc_map, backsql_cmp_oc_id, NULL ); oc_id = oc_map->id; Debug( LDAP_DEBUG_TRACE, "load_schema_map(): " "objectClass '%s': keytbl='%s' keycol='%s'\n", - oc_map->name.bv_val, + BACKSQL_OC_NAME( oc_map ), oc_map->keytbl.bv_val, oc_map->keycol.bv_val ); if ( oc_map->create_proc ) { Debug( LDAP_DEBUG_TRACE, "create_proc='%s'\n", @@ -348,13 +325,13 @@ backsql_load_schema_map( backsql_info *si, SQLHDBC dbh ) Debug( LDAP_DEBUG_TRACE, "load_schema_map(): " "attribute '%s' for objectClass '%s' " "is not defined in schema: %s\n", - at_map->ad->ad_cname.bv_val, - oc_map->name.bv_val, text ); + at_row.cols[ 0 ], + BACKSQL_OC_NAME( oc_map ), text ); return LDAP_CONSTRAINT_VIOLATION; } ber_str2bv( at_row.cols[ 1 ], 0, 1, &at_map->sel_expr ); - if ( at_row.is_null[ 8 ] < 0 ) { + if ( at_row.value_len[ 8 ] < 0 ) { at_map->sel_expr_u.bv_val = NULL; at_map->sel_expr_u.bv_len = 0; } else { @@ -365,17 +342,22 @@ backsql_load_schema_map( backsql_info *si, SQLHDBC dbh ) ber_str2bv( at_row.cols[ 2 ], 0, 0, &bv ); backsql_merge_from_clause( &at_map->from_tbls, &tmpslen, &bv ); - if ( at_row.is_null[ 3 ] < 0 ) { + if ( at_row.value_len[ 3 ] < 0 ) { at_map->join_where.bv_val = NULL; at_map->join_where.bv_len = 0; } else { ber_str2bv( at_row.cols[ 3 ], 0, 1, &at_map->join_where ); } - at_map->add_proc = ( at_row.is_null[ 4 ] < 0 ) ? NULL - : ch_strdup( at_row.cols[4] ); - at_map->delete_proc = ( at_row.is_null[ 5 ] < 0 ) ? NULL - : ch_strdup( at_row.cols[ 5 ] ); + at_map->add_proc = NULL; + if ( at_row.value_len[ 4 ] > 0 ) { + at_map->add_proc = ch_strdup( at_row.cols[4] ); + } + at_map->delete_proc = NULL; + if ( at_row.value_len[ 5 ] > 0 ) { + at_map->delete_proc + = ch_strdup( at_row.cols[ 5 ] ); + } at_map->param_order = strtol( at_row.cols[ 6 ], NULL, 0 ); at_map->expect_return = strtol( at_row.cols[ 7 ], @@ -384,8 +366,7 @@ backsql_load_schema_map( backsql_info *si, SQLHDBC dbh ) Debug( LDAP_DEBUG_TRACE, "load_schema_map(): " "preconstructed query '%s'\n", at_map->query, 0, 0 ); - avl_insert( &oc_map->attrs, at_map, - (AVL_CMP)backsql_cmp_attr, NULL ); + avl_insert( &oc_map->attrs, at_map, backsql_cmp_attr, NULL ); } backsql_FreeRow( &at_row ); SQLFreeStmt( at_sth, SQL_CLOSE ); @@ -410,12 +391,12 @@ backsql_oc2oc( backsql_info *si, ObjectClass *oc ) #endif /* BACKSQL_TRACE */ tmp.oc = oc; - res = (backsql_oc_map_rec *)avl_find( si->oc_by_oc, &tmp, - (AVL_CMP)backsql_cmp_oc ); + res = (backsql_oc_map_rec *)avl_find( si->oc_by_oc, &tmp, backsql_cmp_oc ); #ifdef BACKSQL_TRACE if ( res != NULL ) { Debug( LDAP_DEBUG_TRACE, "<==backsql_oc2oc(): " - "found name='%s', id=%d\n", res->name, res->id, 0 ); + "found name='%s', id=%d\n", + BACKSQL_OC_NAME( res ), res->id, 0 ); } else { Debug( LDAP_DEBUG_TRACE, "<==backsql_oc2oc(): " "not found\n", 0, 0, 0 ); @@ -425,9 +406,6 @@ backsql_oc2oc( backsql_info *si, ObjectClass *oc ) return res; } -/* - * Deprecated - */ backsql_oc_map_rec * backsql_name2oc( backsql_info *si, struct berval *oc_name ) { @@ -444,12 +422,12 @@ backsql_name2oc( backsql_info *si, struct berval *oc_name ) return NULL; } - res = (backsql_oc_map_rec *)avl_find( si->oc_by_oc, &tmp, - (AVL_CMP)backsql_cmp_oc ); + res = (backsql_oc_map_rec *)avl_find( si->oc_by_oc, &tmp, backsql_cmp_oc ); #ifdef BACKSQL_TRACE if ( res != NULL ) { Debug( LDAP_DEBUG_TRACE, "<==oc_with_name(): " - "found name='%s', id=%d\n", res->name, res->id, 0 ); + "found name='%s', id=%d\n", + BACKSQL_OC_NAME( res ), res->id, 0 ); } else { Debug( LDAP_DEBUG_TRACE, "<==oc_with_name(): " "not found\n", 0, 0, 0 ); @@ -471,12 +449,13 @@ backsql_id2oc( backsql_info *si, unsigned long id ) tmp.id = id; res = (backsql_oc_map_rec *)avl_find( si->oc_by_id, &tmp, - (AVL_CMP)backsql_cmp_oc_id ); + backsql_cmp_oc_id ); #ifdef BACKSQL_TRACE if ( res != NULL ) { Debug( LDAP_DEBUG_TRACE, "<==oc_with_name(): " - "found name='%s', id=%d\n", res->name, res->id, 0 ); + "found name='%s', id=%d\n", + BACKSQL_OC_NAME( res ), res->id, 0 ); } else { Debug( LDAP_DEBUG_TRACE, "<==oc_with_name(): " "not found\n", 0, 0, 0 ); @@ -494,18 +473,18 @@ backsql_ad2at( backsql_oc_map_rec* objclass, AttributeDescription *ad ) #ifdef BACKSQL_TRACE Debug( LDAP_DEBUG_TRACE, "==>backsql_ad2at(): " "searching for attribute '%s' for objectclass '%s'\n", - attr, objclass->name, 0 ); + attr, BACKSQL_OC_NAME( objclass ), 0 ); #endif /* BACKSQL_TRACE */ tmp.ad = ad; res = (backsql_at_map_rec *)avl_find( objclass->attrs, &tmp, - (AVL_CMP)backsql_cmp_attr ); + backsql_cmp_attr ); #ifdef BACKSQL_TRACE if ( res != NULL ) { Debug( LDAP_DEBUG_TRACE, "<==backsql_ad2at(): " "found name='%s', sel_expr='%s'\n", - res->name, res->sel_expr.bv_val, 0 ); + res->ad->ad_cname.bv_val, res->sel_expr.bv_val, 0 ); } else { Debug( LDAP_DEBUG_TRACE, "<==backsql_ad2at(): " "not found\n", 0, 0, 0 ); @@ -527,7 +506,7 @@ backsql_name2at( backsql_oc_map_rec* objclass, struct berval *attr ) #ifdef BACKSQL_TRACE Debug( LDAP_DEBUG_TRACE, "==>backsql_name2at(): " "searching for attribute '%s' for objectclass '%s'\n", - attr, objclass->name, 0 ); + attr, BACKSQL_OC_NAME( objclass ), 0 ); #endif /* BACKSQL_TRACE */ if ( slap_bv2ad( attr, &tmp.ad, &text ) != LDAP_SUCCESS ) { @@ -535,7 +514,7 @@ backsql_name2at( backsql_oc_map_rec* objclass, struct berval *attr ) } res = (backsql_at_map_rec *)avl_find( objclass->attrs, &tmp, - (AVL_CMP)backsql_cmp_attr ); + backsql_cmp_attr ); #ifdef BACKSQL_TRACE if ( res != NULL ) { @@ -552,8 +531,9 @@ backsql_name2at( backsql_oc_map_rec* objclass, struct berval *attr ) } static void -backsql_free_attr( backsql_at_map_rec *at ) +backsql_free_attr( void *v_at ) { + backsql_at_map_rec *at = v_at; Debug( LDAP_DEBUG_TRACE, "==>free_attr(): '%s'\n", at->ad->ad_cname.bv_val, 0, 0 ); ch_free( at->sel_expr.bv_val ); @@ -584,12 +564,12 @@ backsql_free_attr( backsql_at_map_rec *at ) } static void -backsql_free_oc( backsql_oc_map_rec *oc ) +backsql_free_oc( void *v_oc ) { + backsql_oc_map_rec *oc = v_oc; Debug( LDAP_DEBUG_TRACE, "==>free_oc(): '%s'\n", - oc->name.bv_val, 0, 0 ); - avl_free( oc->attrs, (AVL_FREE)backsql_free_attr ); - ch_free( oc->name.bv_val ); + BACKSQL_OC_NAME( oc ), 0, 0 ); + avl_free( oc->attrs, backsql_free_attr ); ch_free( oc->keytbl.bv_val ); ch_free( oc->keycol.bv_val ); if ( oc->create_proc != NULL ) { @@ -610,8 +590,8 @@ int backsql_destroy_schema_map( backsql_info *si ) { Debug( LDAP_DEBUG_TRACE, "==>destroy_schema_map()\n", 0, 0, 0 ); - avl_free( si->oc_by_oc, NULL ); - avl_free( si->oc_by_id, (AVL_FREE)backsql_free_oc ); + avl_free( si->oc_by_oc, 0 ); + avl_free( si->oc_by_id, backsql_free_oc ); Debug( LDAP_DEBUG_TRACE, "<==destroy_schema_map()\n", 0, 0, 0 ); return 0; }