MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
hp_clear.c
1 /* Copyright (c) 2000-2002, 2004-2007 MySQL AB, 2009 Sun Microsystems, Inc.
2  Use is subject to license terms.
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; version 2 of the License.
7 
8  This program is distributed in the hope that it will be useful,
9  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  GNU General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License
14  along with this program; if not, write to the Free Software
15  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
16 
17 /*
18  remove all records from database
19  Identical as hp_create() and hp_open() but used HP_SHARE* instead of name and
20  database remains open.
21 */
22 
23 #include "heapdef.h"
24 
25 void heap_clear(HP_INFO *info)
26 {
27  hp_clear(info->s);
28 }
29 
30 void hp_clear(HP_SHARE *info)
31 {
32  DBUG_ENTER("hp_clear");
33 
34  if (info->block.levels)
35  (void) hp_free_level(&info->block,info->block.levels,info->block.root,
36  (uchar*) 0);
37  info->block.levels=0;
38  hp_clear_keys(info);
39  info->records= info->deleted= 0;
40  info->data_length= 0;
41  info->blength=1;
42  info->changed=0;
43  info->del_link=0;
44  DBUG_VOID_RETURN;
45 }
46 
47 
48 /*
49  Clear all keys.
50 
51  SYNOPSIS
52  heap_clear_keys()
53  info A pointer to the heap storage engine HP_INFO struct.
54 
55  DESCRIPTION
56  Delete all trees of all indexes and leave them empty.
57 
58  RETURN
59  void
60 */
61 
62 void heap_clear_keys(HP_INFO *info)
63 {
64  hp_clear(info->s);
65 }
66 
67 
68 /*
69  Clear all keys.
70 
71  SYNOPSIS
72  hp_clear_keys()
73  info A pointer to the heap storage engine HP_SHARE struct.
74 
75  DESCRIPTION
76  Delete all trees of all indexes and leave them empty.
77 
78  RETURN
79  void
80 */
81 
82 void hp_clear_keys(HP_SHARE *info)
83 {
84  uint key;
85  DBUG_ENTER("hp_clear_keys");
86 
87  for (key=0 ; key < info->keys ; key++)
88  {
89  HP_KEYDEF *keyinfo = info->keydef + key;
90  if (keyinfo->algorithm == HA_KEY_ALG_BTREE)
91  {
92  delete_tree(&keyinfo->rb_tree);
93  }
94  else
95  {
96  HP_BLOCK *block= &keyinfo->block;
97  if (block->levels)
98  (void) hp_free_level(block,block->levels,block->root,(uchar*) 0);
99  block->levels=0;
100  block->last_allocated=0;
101  keyinfo->hash_buckets= 0;
102  }
103  }
104  info->index_length=0;
105  DBUG_VOID_RETURN;
106 }
107 
108 
109 /*
110  Disable all indexes.
111 
112  SYNOPSIS
113  heap_disable_indexes()
114  info A pointer to the heap storage engine HP_INFO struct.
115 
116  DESCRIPTION
117  Disable and clear (remove contents of) all indexes.
118 
119  RETURN
120  0 ok
121 */
122 
123 int heap_disable_indexes(HP_INFO *info)
124 {
125  HP_SHARE *share= info->s;
126 
127  if (share->keys)
128  {
129  hp_clear_keys(share);
130  share->currently_disabled_keys= share->keys;
131  share->keys= 0;
132  }
133  return 0;
134 }
135 
136 
137 /*
138  Enable all indexes
139 
140  SYNOPSIS
141  heap_enable_indexes()
142  info A pointer to the heap storage engine HP_INFO struct.
143 
144  DESCRIPTION
145  Enable all indexes. The indexes might have been disabled
146  by heap_disable_index() before.
147  The function works only if both data and indexes are empty,
148  since the heap storage engine cannot repair the indexes.
149  To be sure, call handler::delete_all_rows() before.
150 
151  RETURN
152  0 ok
153  HA_ERR_CRASHED data or index is non-empty.
154 */
155 
156 int heap_enable_indexes(HP_INFO *info)
157 {
158  int error= 0;
159  HP_SHARE *share= info->s;
160 
161  if (share->data_length || share->index_length)
162  error= HA_ERR_CRASHED;
163  else
164  if (share->currently_disabled_keys)
165  {
166  share->keys= share->currently_disabled_keys;
167  share->currently_disabled_keys= 0;
168  }
169  return error;
170 }
171 
172 
173 /*
174  Test if indexes are disabled.
175 
176  SYNOPSIS
177  heap_indexes_are_disabled()
178  info A pointer to the heap storage engine HP_INFO struct.
179 
180  DESCRIPTION
181  Test if indexes are disabled.
182 
183  RETURN
184  0 indexes are not disabled
185  1 all indexes are disabled
186  [2 non-unique indexes are disabled - NOT YET IMPLEMENTED]
187 */
188 
189 int heap_indexes_are_disabled(HP_INFO *info)
190 {
191  HP_SHARE *share= info->s;
192 
193  return (! share->keys && share->currently_disabled_keys);
194 }
195