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

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 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. /* Extra functions we want to do with a database */
  14. /* - Set flags for quicker databasehandler */
  15. /* - Set databasehandler to normal */
  16. /* - Reset recordpointers as after open database */
  17. #include "heapdef.h"
  18. static void heap_extra_keyflag(register HP_INFO *info,
  19.                                enum ha_extra_function function);
  20. /* set extra flags for database */
  21. int heap_extra(register HP_INFO *info, enum ha_extra_function function)
  22. {
  23.   DBUG_ENTER("heap_extra");
  24.   switch (function) {
  25.   case HA_EXTRA_RESET:
  26.   case HA_EXTRA_RESET_STATE:
  27.     info->lastinx= -1;
  28.     info->current_record= (ulong) ~0L;
  29.     info->current_hash_ptr=0;
  30.     info->update=0;
  31.     break;
  32.   case HA_EXTRA_NO_READCHECK:
  33.     info->opt_flag&= ~READ_CHECK_USED; /* No readcheck */
  34.     break;
  35.   case HA_EXTRA_READCHECK:
  36.     info->opt_flag|= READ_CHECK_USED;
  37.     break;
  38.   case HA_EXTRA_CHANGE_KEY_TO_UNIQUE:
  39.   case HA_EXTRA_CHANGE_KEY_TO_DUP:
  40.     heap_extra_keyflag(info, function);
  41.     break;
  42.   default:
  43.     break;
  44.   }
  45.   DBUG_RETURN(0);
  46. } /* heap_extra */
  47. /*
  48.     Start/Stop Inserting Duplicates Into a Table, WL#1648.
  49.  */
  50. static void heap_extra_keyflag(register HP_INFO *info,
  51.                                enum ha_extra_function function)
  52. {
  53.   uint  idx;
  54.   for (idx= 0; idx< info->s->keys; idx++)
  55.   {
  56.     switch (function) {
  57.     case HA_EXTRA_CHANGE_KEY_TO_UNIQUE:
  58.       info->s->keydef[idx].flag|= HA_NOSAME;
  59.       break;
  60.     case HA_EXTRA_CHANGE_KEY_TO_DUP:
  61.       info->s->keydef[idx].flag&= ~(HA_NOSAME);
  62.       break;
  63.     default:
  64.       break;
  65.     }
  66.   }
  67. }