hp_clear.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000,2004 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*
  14.   remove all records from database
  15.   Identical as hp_create() and hp_open() but used HP_SHARE* instead of name and
  16.   database remains open.
  17. */
  18. #include "heapdef.h"
  19. void heap_clear(HP_INFO *info)
  20. {
  21.   hp_clear(info->s);
  22. }
  23. void hp_clear(HP_SHARE *info)
  24. {
  25.   DBUG_ENTER("hp_clear");
  26.   if (info->block.levels)
  27.     VOID(hp_free_level(&info->block,info->block.levels,info->block.root,
  28. (byte*) 0));
  29.   info->block.levels=0;
  30.   hp_clear_keys(info);
  31.   info->records=info->deleted=info->data_length=0;
  32.   info->blength=1;
  33.   info->changed=0;
  34.   info->del_link=0;
  35.   DBUG_VOID_RETURN;
  36. }
  37. /*
  38.   Clear all keys.
  39.   SYNOPSIS
  40.     heap_clear_keys()
  41.     info      A pointer to the heap storage engine HP_INFO struct.
  42.   DESCRIPTION
  43.     Delete all trees of all indexes and leave them empty.
  44.   RETURN
  45.     void
  46. */
  47. void heap_clear_keys(HP_INFO *info)
  48. {
  49.   hp_clear(info->s);
  50. }
  51. /*
  52.   Clear all keys.
  53.   SYNOPSIS
  54.     hp_clear_keys()
  55.     info      A pointer to the heap storage engine HP_SHARE struct.
  56.   DESCRIPTION
  57.     Delete all trees of all indexes and leave them empty.
  58.   RETURN
  59.     void
  60. */
  61. void hp_clear_keys(HP_SHARE *info)
  62. {
  63.   uint key;
  64.   DBUG_ENTER("hp_clear_keys");
  65.   for (key=0 ; key < info->keys ; key++)
  66.   {
  67.     HP_KEYDEF *keyinfo = info->keydef + key;
  68.     if (keyinfo->algorithm == HA_KEY_ALG_BTREE)
  69.     {
  70.       delete_tree(&keyinfo->rb_tree);
  71.     }
  72.     else
  73.     {
  74.       HP_BLOCK *block= &keyinfo->block;
  75.       if (block->levels)
  76.         VOID(hp_free_level(block,block->levels,block->root,(byte*) 0));
  77.       block->levels=0;
  78.       block->last_allocated=0;
  79.       keyinfo->hash_buckets= 0;
  80.     }
  81.   }
  82.   info->index_length=0;
  83.   DBUG_VOID_RETURN;
  84. }
  85. /*
  86.   Disable all indexes.
  87.   SYNOPSIS
  88.     heap_disable_indexes()
  89.     info      A pointer to the heap storage engine HP_INFO struct.
  90.   DESCRIPTION
  91.     Disable and clear (remove contents of) all indexes.
  92.   RETURN
  93.     0  ok
  94. */
  95. int heap_disable_indexes(HP_INFO *info)
  96. {
  97.   HP_SHARE *share= info->s;
  98.   if (share->keys)
  99.   {
  100.     hp_clear_keys(share);
  101.     share->currently_disabled_keys= share->keys;
  102.     share->keys= 0;
  103.   }
  104.   return 0;
  105. }
  106. /*
  107.   Enable all indexes
  108.   SYNOPSIS
  109.     heap_enable_indexes()
  110.     info      A pointer to the heap storage engine HP_INFO struct.
  111.   DESCRIPTION
  112.     Enable all indexes. The indexes might have been disabled
  113.     by heap_disable_index() before.
  114.     The function works only if both data and indexes are empty,
  115.     since the heap storage engine cannot repair the indexes.
  116.     To be sure, call handler::delete_all_rows() before.
  117.   RETURN
  118.     0  ok
  119.     HA_ERR_CRASHED data or index is non-empty.
  120. */
  121. int heap_enable_indexes(HP_INFO *info)
  122. {
  123.   int error= 0;
  124.   HP_SHARE *share= info->s;
  125.   if (share->data_length || share->index_length)
  126.     error= HA_ERR_CRASHED;
  127.   else
  128.     if (share->currently_disabled_keys)
  129.     {
  130.       share->keys= share->currently_disabled_keys;
  131.       share->currently_disabled_keys= 0;
  132.     }
  133.   return error;
  134. }
  135. /*
  136.   Test if indexes are disabled.
  137.   SYNOPSIS
  138.     heap_indexes_are_disabled()
  139.     info      A pointer to the heap storage engine HP_INFO struct.
  140.   DESCRIPTION
  141.     Test if indexes are disabled.
  142.   RETURN
  143.     0  indexes are not disabled
  144.     1  all indexes are disabled
  145.    [2  non-unique indexes are disabled - NOT YET IMPLEMENTED]
  146. */
  147. int heap_indexes_are_disabled(HP_INFO *info)
  148. {
  149.   HP_SHARE *share= info->s;
  150.   return (! share->keys && share->currently_disabled_keys);
  151. }