~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/memory/hp_delete.cc

  • Committer: Brian Aker
  • Date: 2010-11-08 18:24:58 UTC
  • mto: (1921.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 1916.
  • Revision ID: brian@tangent.org-20101108182458-twv4hyix43ojno80
Merge in changes such that lock is now broken out into its own directory.

Show diffs side-by-side

added added

removed removed

Lines of Context:
11
11
 
12
12
   You should have received a copy of the GNU General Public License
13
13
   along with this program; if not, write to the Free Software
14
 
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
14
   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
15
15
 
16
16
/* remove current record in heap-database */
17
17
 
20
20
int heap_delete(HP_INFO *info, const unsigned char *record)
21
21
{
22
22
  unsigned char *pos;
23
 
  HP_SHARE *share=info->s;
 
23
  HP_SHARE *share=info->getShare();
24
24
  HP_KEYDEF *keydef, *end, *p_lastinx;
25
 
  uint32_t rec_length, chunk_count;
26
25
 
27
26
  test_active(info);
28
27
 
30
29
    return(errno);                      /* Record changed */
31
30
  share->changed=1;
32
31
 
33
 
  rec_length = hp_get_encoded_data_length(share, record, &chunk_count);
34
 
 
35
32
  if ( --(share->records) < share->blength >> 1) share->blength>>=1;
36
33
  pos=info->current_ptr;
37
34
 
39
36
  for (keydef = share->keydef, end = keydef + share->keys; keydef < end;
40
37
       keydef++)
41
38
  {
42
 
    if ((*keydef->delete_key)(info, keydef, record, pos, keydef == p_lastinx))
 
39
    if (hp_delete_key(info, keydef, record, pos, keydef == p_lastinx))
43
40
      goto err;
44
41
  }
45
42
 
56
53
 
57
54
 
58
55
/*
59
 
  Remove one key from rb-tree
60
 
*/
61
 
 
62
 
int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo,
63
 
                   const unsigned char *record, unsigned char *recpos, int flag)
64
 
{
65
 
  heap_rb_param custom_arg;
66
 
  uint32_t old_allocated;
67
 
  int res;
68
 
 
69
 
  if (flag)
70
 
    info->last_pos= NULL; /* For heap_rnext/heap_rprev */
71
 
 
72
 
  custom_arg.keyseg= keyinfo->seg;
73
 
  custom_arg.key_length= hp_rb_make_key(keyinfo, info->recbuf, record, recpos);
74
 
  custom_arg.search_flag= SEARCH_SAME;
75
 
  old_allocated= keyinfo->rb_tree.allocated;
76
 
  res= tree_delete(&keyinfo->rb_tree, info->recbuf, custom_arg.key_length,
77
 
                   &custom_arg);
78
 
  info->s->index_length-= (old_allocated - keyinfo->rb_tree.allocated);
79
 
  return res;
80
 
}
81
 
 
82
 
 
83
 
/*
84
56
  Remove one key from hash-table
85
57
 
86
58
  SYNPOSIS
101
73
{
102
74
  uint32_t blength,pos2,pos_hashnr,lastpos_hashnr;
103
75
  HASH_INFO *lastpos,*gpos,*pos,*pos3,*empty,*last_ptr;
104
 
  HP_SHARE *share=info->s;
 
76
  HP_SHARE *share=info->getShare();
105
77
 
106
78
  blength=share->blength;
107
79
  if (share->records+1 == blength)