12
12
You should have received a copy of the GNU General Public License
13
13
along with this program; if not, write to the Free Software
14
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
14
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
16
16
/* Update an old row in a MyISAM table */
18
#include "myisam_priv.h"
18
#include "myisamdef.h"
19
19
#include <drizzled/util/test.h>
21
using namespace drizzled;
23
21
int mi_update(register MI_INFO *info, const unsigned char *oldrec, unsigned char *newrec)
25
23
int flag,key_changed,save_errno;
26
register internal::my_off_t pos;
24
register my_off_t pos;
28
26
unsigned char old_key[MI_MAX_KEY_BUFF],*new_key;
29
27
bool auto_key_changed=0;
31
29
MYISAM_SHARE *share= info->s;
32
internal::ha_checksum old_checksum= 0;
30
ha_checksum old_checksum= 0;
34
32
if (!(info->update & HA_STATE_AKTIV))
36
return(errno=HA_ERR_KEY_NOT_FOUND);
34
return(my_errno=HA_ERR_KEY_NOT_FOUND);
38
36
if (share->options & HA_OPTION_READ_ONLY_DATA)
38
return(my_errno=EACCES);
42
40
if (info->state->key_file_length >= share->base.margin_key_file_length)
44
return(errno=HA_ERR_INDEX_FILE_FULL);
42
return(my_errno=HA_ERR_INDEX_FILE_FULL);
47
45
if (_mi_readinfo(info,F_WRLCK,1))
50
48
if (share->calc_checksum)
51
49
old_checksum=info->checksum=(*share->calc_checksum)(info,oldrec);
52
50
if ((*share->compare_record)(info,oldrec))
55
53
goto err_end; /* Record has changed */
126
124
MI_STATUS_INFO state;
127
125
ha_rows org_split;
128
internal::my_off_t org_delete_link;
126
my_off_t org_delete_link;
130
128
memcpy(&state, info->state, sizeof(state));
131
129
org_split= share->state.split;
157
155
there is no index change there could be data change.
159
157
_mi_writeinfo(info, WRITEINFO_UPDATE_KEYFILE);
158
if (info->invalidator != 0)
160
(*info->invalidator)(info->filename);
165
168
key_changed|= HA_STATE_CHANGED;
166
if (errno == HA_ERR_FOUND_DUPP_KEY || errno == HA_ERR_OUT_OF_MEM ||
167
errno == HA_ERR_RECORD_FILE_FULL)
169
if (my_errno == HA_ERR_FOUND_DUPP_KEY || my_errno == HA_ERR_OUT_OF_MEM ||
170
my_errno == HA_ERR_RECORD_FILE_FULL)
169
172
info->errkey= (int) i;
197
200
mi_print_error(info->s, HA_ERR_CRASHED);
198
201
save_errno=HA_ERR_CRASHED;
200
return(errno=save_errno);
203
return(my_errno=save_errno);
201
204
} /* mi_update */