X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fback-sql%2Fschema-map.c;h=6244955033b07ae2c8fff893139481c4c54277c2;hb=f26a0e0db0ee1a59fc6b256e8c9a00addda54688;hp=d3a7956dcda41e3ce1115b8e08894019d7edceb1;hpb=fbc11bd16a6a6ab4016495c73dd458b1d89e7ed5;p=openldap diff --git a/servers/slapd/back-sql/schema-map.c b/servers/slapd/back-sql/schema-map.c index d3a7956dcd..6244955033 100644 --- a/servers/slapd/back-sql/schema-map.c +++ b/servers/slapd/back-sql/schema-map.c @@ -13,7 +13,7 @@ #include #include -#include +#include "ac/string.h" #include "slap.h" #include "lber_pvt.h" #include "ldap_pvt.h" @@ -26,14 +26,16 @@ * 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 ) ); } @@ -41,8 +43,9 @@ backsql_cmp_oc_id( backsql_oc_map_rec *m1, backsql_oc_map_rec *m2 ) * 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 ) ); } @@ -116,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 ) ); @@ -145,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; } @@ -239,16 +240,16 @@ backsql_load_schema_map( backsql_info *si, SQLHDBC dbh ) 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 ); @@ -259,10 +260,8 @@ 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", @@ -326,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, + 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 { @@ -343,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 ], @@ -362,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 ); @@ -388,8 +391,7 @@ 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(): " @@ -420,8 +422,7 @@ 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(): " @@ -448,7 +449,7 @@ 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 ) { @@ -477,7 +478,7 @@ backsql_ad2at( backsql_oc_map_rec* objclass, AttributeDescription *ad ) 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 ) { @@ -513,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 ) { @@ -530,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 ); @@ -562,11 +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", BACKSQL_OC_NAME( oc ), 0, 0 ); - avl_free( oc->attrs, (AVL_FREE)backsql_free_attr ); + avl_free( oc->attrs, backsql_free_attr ); ch_free( oc->keytbl.bv_val ); ch_free( oc->keycol.bv_val ); if ( oc->create_proc != NULL ) { @@ -587,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; }