~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
/* Copyright (C) 2000-2001, 2004 MySQL AB
2
3
   This program is free software; you can redistribute it and/or modify
4
   it under the terms of the GNU General Public License as published by
5
   the Free Software Foundation; version 2 of the License.
6
7
   This program is distributed in the hope that it will be useful,
8
   but WITHOUT ANY WARRANTY; without even the implied warranty of
9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
   GNU General Public License for more details.
11
12
   You should have received a copy of the GNU General Public License
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 */
15
16
/* Extra functions we want to do with a database */
17
/* - Set flags for quicker databasehandler */
18
/* - Set databasehandler to normal */
19
/* - Reset recordpointers as after open database */
20
1130.3.28 by Monty Taylor
Moved heapdef.h and myisamdef.h to *_priv.h for easier filtering for include guard check.
21
#include "heap_priv.h"
1 by brian
clean slate
22
23
static void heap_extra_keyflag(register HP_INFO *info,
24
                               enum ha_extra_function function);
25
26
27
	/* set extra flags for database */
28
29
int heap_extra(register HP_INFO *info, enum ha_extra_function function)
30
{
31
  switch (function) {
32
  case HA_EXTRA_RESET_STATE:
33
    heap_reset(info);
34
  case HA_EXTRA_NO_READCHECK:
35
    info->opt_flag&= ~READ_CHECK_USED;	/* No readcheck */
36
    break;
37
  case HA_EXTRA_READCHECK:
38
    info->opt_flag|= READ_CHECK_USED;
39
    break;
40
  case HA_EXTRA_CHANGE_KEY_TO_UNIQUE:
41
  case HA_EXTRA_CHANGE_KEY_TO_DUP:
42
    heap_extra_keyflag(info, function);
43
    break;
44
  default:
45
    break;
46
  }
51.3.1 by Jay Pipes
Removed all DBUG symbols from heap storage engine
47
  return(0);
1 by brian
clean slate
48
} /* heap_extra */
49
50
51
int heap_reset(HP_INFO *info)
52
{
53
  info->lastinx= -1;
365.2.8 by Monty Taylor
More MAX macros.
54
  info->current_record= UINT32_MAX;
1 by brian
clean slate
55
  info->current_hash_ptr=0;
56
  info->update=0;
57
  info->next_block=0;
58
  return 0;
59
}
60
61
62
/*
63
    Start/Stop Inserting Duplicates Into a Table, WL#1648.
64
 */
65
static void heap_extra_keyflag(register HP_INFO *info,
66
                               enum ha_extra_function function)
67
{
482 by Brian Aker
Remove uint.
68
  uint32_t  idx;
1 by brian
clean slate
69
70
  for (idx= 0; idx< info->s->keys; idx++)
71
  {
72
    switch (function) {
73
    case HA_EXTRA_CHANGE_KEY_TO_UNIQUE:
74
      info->s->keydef[idx].flag|= HA_NOSAME;
75
      break;
76
    case HA_EXTRA_CHANGE_KEY_TO_DUP:
77
      info->s->keydef[idx].flag&= ~(HA_NOSAME);
78
      break;
79
    default:
80
      break;
81
    }
82
  }
83
}