Home | History | Annotate | Download | only in back-mdb

Lines Matching defs:mdb

30 #include "back-mdb.h"
38 mdb_attr_slot( struct mdb_info *mdb, AttributeDescription *ad, int *ins )
41 unsigned n = mdb->mi_nattrs;
48 val = SLAP_PTRCMP( ad, mdb->mi_attrs[cursor]->ai_desc );
67 ainfo_insert( struct mdb_info *mdb, AttrInfo *a )
70 int i = mdb_attr_slot( mdb, a->ai_desc, &x );
76 mdb->mi_attrs = ch_realloc( mdb->mi_attrs, ( mdb->mi_nattrs+1 ) *
78 if ( x < mdb->mi_nattrs )
79 AC_MEMCPY( &mdb->mi_attrs[x+1], &mdb->mi_attrs[x],
80 ( mdb->mi_nattrs - x ) * sizeof( AttrInfo *));
81 mdb->mi_attrs[x] = a;
82 mdb->mi_nattrs++;
88 struct mdb_info *mdb,
91 int i = mdb_attr_slot( mdb, desc, NULL );
92 return i < 0 ? NULL : mdb->mi_attrs[i];
100 struct mdb_info *mdb = (struct mdb_info *) be->be_private;
106 if ( !mdb->mi_nattrs )
111 rc = mdb_txn_begin( mdb->mi_dbenv, NULL, 0, &txn );
121 dbis = ch_calloc( 1, mdb->mi_nattrs * sizeof(MDB_dbi) );
130 for ( i=0; i<mdb->mi_nattrs; i++ ) {
131 if ( mdb->mi_attrs[i]->ai_dbi ) /* already open */
133 if ( !( mdb->mi_attrs[i]->ai_indexmask || mdb->mi_attrs[i]->ai_newmask )) /* not an index record */
135 rc = mdb_dbi_open( txn, mdb->mi_attrs[i]->ai_desc->ad_type->sat_cname.bv_val,
136 flags, &mdb->mi_attrs[i]->ai_dbi );
141 mdb->mi_attrs[i]->ai_desc->ad_type->sat_cname.bv_val,
150 dbis[i] = mdb->mi_attrs[i]->ai_dbi;
170 for ( i=0; i<mdb->mi_nattrs; i++ ) {
172 mdb->mi_attrs[i]->ai_dbi = 0;
173 mdb->mi_attrs[i]->ai_indexmask |= MDB_INDEX_DELETING;
176 mdb_attr_flush( mdb );
186 struct mdb_info *mdb
190 for ( i=0; i<mdb->mi_nattrs; i++ )
191 if ( mdb->mi_attrs[i]->ai_dbi ) {
192 mdb_dbi_close( mdb->mi_dbenv, mdb->mi_attrs[i]->ai_dbi );
193 mdb->mi_attrs[i]->ai_dbi = 0;
199 struct mdb_info *mdb,
234 mask = mdb->mi_defaultmask;
282 mdb->mi_defaultmask |= mask;
400 if ( mdb->mi_flags & MDB_IS_OPEN ) {
410 a_cr = mdb_attr_mask( mdb, ad );
436 rc = ainfo_insert( mdb, a );
438 AttrInfo *b = mdb_attr_mask( mdb, ad );
447 if ( mdb->mi_flags & MDB_IS_OPEN ) {
512 mdb_attr_index_unparse( struct mdb_info *mdb, BerVarray *bva )
516 if ( mdb->mi_defaultmask ) {
517 aidef.ai_indexmask = mdb->mi_defaultmask;
520 for ( i=0; i<mdb->mi_nattrs; i++ )
521 if ( mdb->mi_attrs[i]->ai_indexmask )
522 mdb_attr_index_unparser( mdb->mi_attrs[i], bva );
527 struct mdb_info *mdb,
571 mdb->mi_multi_hi = hi;
572 mdb->mi_multi_lo = lo;
599 rc = ainfo_insert( mdb, a );
601 AttrInfo *b = mdb_attr_mask( mdb, ad );
653 mdb_attr_multi_unparse( struct mdb_info *mdb, BerVarray *bva )
657 if ( mdb->mi_multi_hi < UINT_MAX ) {
658 aidef.ai_multi_hi = mdb->mi_multi_hi;
659 aidef.ai_multi_lo = mdb->mi_multi_lo;
662 for ( i=0; i<mdb->mi_nattrs; i++ )
663 if ( mdb->mi_attrs[i]->ai_multi_hi < UINT_MAX )
664 mdb_attr_multi_unparser( mdb->mi_attrs[i], bva );
668 mdb_attr_multi_thresh( struct mdb_info *mdb, AttributeDescription *ad, unsigned *hi, unsigned *lo )
670 AttrInfo *ai = mdb_attr_mask( mdb, ad );
680 *hi = mdb->mi_multi_hi;
682 *lo = mdb->mi_multi_lo;
696 mdb_attr_index_destroy( struct mdb_info *mdb )
700 for ( i=0; i<mdb->mi_nattrs; i++ )
701 mdb_attr_info_free( mdb->mi_attrs[i] );
703 free( mdb->mi_attrs );
706 void mdb_attr_index_free( struct mdb_info *mdb, AttributeDescription *ad )
710 i = mdb_attr_slot( mdb, ad, NULL );
712 mdb_attr_info_free( mdb->mi_attrs[i] );
713 mdb->mi_nattrs--;
714 for (; i<mdb->mi_nattrs; i++)
715 mdb->mi_attrs[i] = mdb->mi_attrs[i+1];
719 void mdb_attr_flush( struct mdb_info *mdb )
723 for ( i=0; i<mdb->mi_nattrs; i++ ) {
724 if ( mdb->mi_attrs[i]->ai_indexmask & MDB_INDEX_DELETING ) {
726 if ( mdb->mi_attrs[i]->ai_multi_lo < UINT_MAX ) {
727 mdb->mi_attrs[i]->ai_indexmask = 0;
728 mdb->mi_attrs[i]->ai_newmask = 0;
731 mdb_attr_info_free( mdb->mi_attrs[i] );
732 mdb->mi_nattrs--;
733 for (j=i; j<mdb->mi_nattrs; j++)
734 mdb->mi_attrs[j] = mdb->mi_attrs[j+1];
741 int mdb_ad_read( struct mdb_info *mdb, MDB_txn *txn )
750 rc = mdb_cursor_open( txn, mdb->mi_ad2id, &mc );
759 i = mdb->mi_numads+1;
771 rc = slap_bv2undef_ad( &bdata, &mdb->mi_ads[i], &text, 0 );
778 mdb->mi_adxs[ad->ad_index] = i;
779 mdb->mi_ads[i] = ad;
784 mdb->mi_numads = i-1;
795 int mdb_ad_get( struct mdb_info *mdb, MDB_txn *txn, AttributeDescription *ad )
800 rc = mdb_ad_read( mdb, txn );
804 if ( mdb->mi_adxs[ad->ad_index] )
807 i = mdb->mi_numads+1;
813 rc = mdb_put( txn, mdb->mi_ad2id, &key, &val, 0 );
815 mdb->mi_adxs[ad->ad_index] = i;
816 mdb->mi_ads[i] = ad;
817 mdb->mi_numads = i;
827 void mdb_ad_unwind( struct mdb_info *mdb, int prev_ads )
831 for (i=mdb->mi_numads; i>prev_ads; i--) {
832 mdb->mi_adxs[mdb->mi_ads[i]->ad_index] = 0;
833 mdb->mi_ads[i] = NULL;
835 mdb->mi_numads = i;