~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
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
23
using namespace drizzled;
24
1 by brian
clean slate
25
static void heap_extra_keyflag(register HP_INFO *info,
26
                               enum ha_extra_function function);
27
28
29
	/* set extra flags for database */
30
31
int heap_extra(register HP_INFO *info, enum ha_extra_function function)
32
{
33
  switch (function) {
34
  case HA_EXTRA_RESET_STATE:
35
    heap_reset(info);
36
  case HA_EXTRA_NO_READCHECK:
37
    info->opt_flag&= ~READ_CHECK_USED;	/* No readcheck */
38
    break;
39
  case HA_EXTRA_READCHECK:
40
    info->opt_flag|= READ_CHECK_USED;
41
    break;
42
  case HA_EXTRA_CHANGE_KEY_TO_UNIQUE:
43
  case HA_EXTRA_CHANGE_KEY_TO_DUP:
44
    heap_extra_keyflag(info, function);
45
    break;
46
  default:
47
    break;
48
  }
51.3.1 by Jay Pipes
Removed all DBUG symbols from heap storage engine
49
  return(0);
1 by brian
clean slate
50
} /* heap_extra */
51
52
53
int heap_reset(HP_INFO *info)
54
{
55
  info->lastinx= -1;
365.2.8 by Monty Taylor
More MAX macros.
56
  info->current_record= UINT32_MAX;
1 by brian
clean slate
57
  info->current_hash_ptr=0;
58
  info->update=0;
59
  info->next_block=0;
60
  return 0;
61
}
62
63
64
/*
65
    Start/Stop Inserting Duplicates Into a Table, WL#1648.
66
 */
67
static void heap_extra_keyflag(register HP_INFO *info,
68
                               enum ha_extra_function function)
69
{
1697.2.1 by Brian Aker
Encapsulate the internal share for HEAP.
70
  for (uint32_t idx= 0; idx< info->getShare()->keys; idx++)
1 by brian
clean slate
71
  {
72
    switch (function) {
73
    case HA_EXTRA_CHANGE_KEY_TO_UNIQUE:
1697.2.1 by Brian Aker
Encapsulate the internal share for HEAP.
74
      info->getShare()->keydef[idx].flag|= HA_NOSAME;
1 by brian
clean slate
75
      break;
76
    case HA_EXTRA_CHANGE_KEY_TO_DUP:
1697.2.1 by Brian Aker
Encapsulate the internal share for HEAP.
77
      info->getShare()->keydef[idx].flag&= ~(HA_NOSAME);
1 by brian
clean slate
78
      break;
79
    default:
80
      break;
81
    }
82
  }
83
}