00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "heap_priv.h"
00022
00023 using namespace drizzled;
00024
00025 static void heap_extra_keyflag(register HP_INFO *info,
00026 enum ha_extra_function function);
00027
00028
00029
00030
00031 int heap_extra(register HP_INFO *info, enum ha_extra_function function)
00032 {
00033 switch (function) {
00034 case HA_EXTRA_RESET_STATE:
00035 heap_reset(info);
00036 case HA_EXTRA_NO_READCHECK:
00037 info->opt_flag&= ~READ_CHECK_USED;
00038 break;
00039 case HA_EXTRA_READCHECK:
00040 info->opt_flag|= READ_CHECK_USED;
00041 break;
00042 case HA_EXTRA_CHANGE_KEY_TO_UNIQUE:
00043 case HA_EXTRA_CHANGE_KEY_TO_DUP:
00044 heap_extra_keyflag(info, function);
00045 break;
00046 default:
00047 break;
00048 }
00049 return(0);
00050 }
00051
00052
00053 int heap_reset(HP_INFO *info)
00054 {
00055 info->lastinx= -1;
00056 info->current_record= UINT32_MAX;
00057 info->current_hash_ptr=0;
00058 info->update=0;
00059 info->next_block=0;
00060 return 0;
00061 }
00062
00063
00064
00065
00066
00067 static void heap_extra_keyflag(register HP_INFO *info,
00068 enum ha_extra_function function)
00069 {
00070 for (uint32_t idx= 0; idx< info->getShare()->keys; idx++)
00071 {
00072 switch (function) {
00073 case HA_EXTRA_CHANGE_KEY_TO_UNIQUE:
00074 info->getShare()->keydef[idx].flag|= HA_NOSAME;
00075 break;
00076 case HA_EXTRA_CHANGE_KEY_TO_DUP:
00077 info->getShare()->keydef[idx].flag&= ~(HA_NOSAME);
00078 break;
00079 default:
00080 break;
00081 }
00082 }
00083 }