105
107
FIX_LENGTH(cs, pos, length, char_length);
106
108
store_key_length_inc(key,char_length);
107
memcpy(key, pos, char_length);
109
memcpy((uchar*) key,(uchar*) pos,(size_t) char_length);
108
110
key+=char_length;
117
119
set_if_smaller(length,tmp_length);
118
120
FIX_LENGTH(cs, pos, length, char_length);
119
121
store_key_length_inc(key,char_length);
120
memcpy(key, pos, char_length);
122
memcpy((uchar*) key,(uchar*) pos,(size_t) char_length);
121
123
key+= char_length;
124
126
else if (keyseg->flag & HA_BLOB_PART)
126
128
uint tmp_length=_mi_calc_blob_length(keyseg->bit_start,pos);
127
memcpy(&pos, pos+keyseg->bit_start, sizeof(char*));
129
memcpy_fixed((uchar*) &pos,pos+keyseg->bit_start,sizeof(char*));
128
130
set_if_smaller(length,tmp_length);
129
131
FIX_LENGTH(cs, pos, length, char_length);
130
132
store_key_length_inc(key,char_length);
131
memcpy(key, pos, char_length);
133
memcpy((uchar*) key,(uchar*) pos,(size_t) char_length);
132
134
key+= char_length;
169
171
FIX_LENGTH(cs, pos, length, char_length);
170
memcpy(key, pos, char_length);
172
memcpy((uchar*) key, pos, char_length);
171
173
if (length > char_length)
172
174
cs->cset->fill(cs, (char*) key+char_length, length-char_length, ' ');
175
177
_mi_dpointer(info,key,filepos);
176
return((uint) (key-start)); /* Return keylength */
178
DBUG_PRINT("exit",("keynr: %d",keynr));
179
DBUG_DUMP("key",(uchar*) start,(uint) (key-start)+keyseg->length);
181
_mi_print_key(DBUG_FILE,info->s->keyinfo[keynr].seg,start,
182
(uint) (key-start)););
183
DBUG_RETURN((uint) (key-start)); /* Return keylength */
177
184
} /* _mi_make_key */
201
208
uchar *start_key=key;
202
209
HA_KEYSEG *keyseg;
210
my_bool is_ft= info->s->keyinfo[keynr].flag & HA_FULLTEXT;
211
DBUG_ENTER("_mi_pack_key");
204
213
/* only key prefixes are supported */
205
assert(((keypart_map+1) & keypart_map) == 0);
214
DBUG_ASSERT(((keypart_map+1) & keypart_map) == 0);
207
216
for (keyseg= info->s->keyinfo[keynr].seg ; keyseg->type && keypart_map;
208
217
old+= keyseg->length, keyseg++)
222
231
continue; /* Found NULL */
225
char_length= (cs && cs->mbmaxlen > 1) ? length/cs->mbmaxlen : length;
234
char_length= (!is_ft && cs && cs->mbmaxlen > 1) ? length/cs->mbmaxlen : length;
227
236
if (keyseg->flag & HA_SPACE_PACK)
240
249
length=(uint) (end-pos);
241
250
FIX_LENGTH(cs, pos, length, char_length);
242
251
store_key_length_inc(key,char_length);
243
memcpy(key, pos, char_length);
252
memcpy((uchar*) key,pos,(size_t) char_length);
244
253
key+= char_length;
253
262
FIX_LENGTH(cs, pos, length, char_length);
254
263
store_key_length_inc(key,char_length);
255
264
old+=2; /* Skip length */
256
memcpy(key, pos, char_length);
265
memcpy((uchar*) key, pos,(size_t) char_length);
257
266
key+= char_length;
267
276
FIX_LENGTH(cs, pos, length, char_length);
268
memcpy(key, pos, char_length);
277
memcpy((uchar*) key, pos, char_length);
269
278
if (length > char_length)
270
279
cs->cset->fill(cs, (char*) key+char_length, length-char_length, ' ');
335
345
clr_rec_bits(record + keyseg->bit_pos, keyseg->bit_start,
336
346
keyseg->bit_length);
338
memcpy(record + keyseg->start, key, length);
348
memcpy(record + keyseg->start, (uchar*) key, length);
350
360
pos= record+keyseg->start;
351
361
if (keyseg->type != (int) HA_KEYTYPE_NUM)
353
memcpy(pos, key, length);
363
memcpy(pos,key,(size_t) length);
354
364
keyseg->charset->cset->fill(keyseg->charset,
355
365
(char*) pos + length,
356
366
keyseg->length - length,
361
memset(pos, ' ', keyseg->length-length);
362
memcpy(pos+keyseg->length-length, key, length);
371
bfill(pos,keyseg->length-length,' ');
372
memcpy(pos+keyseg->length-length,key,(size_t) length);
380
390
int2store(record+keyseg->start, length);
381
391
/* And key data */
382
memcpy(record+keyseg->start + keyseg->bit_start, key, length);
392
memcpy(record+keyseg->start + keyseg->bit_start, (uchar*) key, length);
385
395
else if (keyseg->flag & HA_BLOB_PART)
393
403
memcpy(record+keyseg->start+keyseg->bit_start,
394
&blob_ptr,sizeof(char*));
404
(char*) &blob_ptr,sizeof(char*));
395
405
memcpy(blob_ptr,key,length);
396
406
blob_ptr+=length;
422
432
if (key+keyseg->length > key_end)
425
memcpy(record+keyseg->start, key, keyseg->length);
435
memcpy(record+keyseg->start,(uchar*) key,
436
(size_t) keyseg->length);
426
437
key+= keyseg->length;
432
return(1); /* Crashed row */
443
DBUG_RETURN(1); /* Crashed row */
433
444
} /* _mi_put_key_in_record */
502
uint64_t retrieve_auto_increment(MI_INFO *info,const uchar *record)
513
ulonglong retrieve_auto_increment(MI_INFO *info,const uchar *record)
504
uint64_t value= 0; /* Store unsigned values here */
505
int64_t s_value= 0; /* Store signed values here */
515
ulonglong value= 0; /* Store unsigned values here */
516
longlong s_value= 0; /* Store signed values here */
506
517
HA_KEYSEG *keyseg= info->s->keyinfo[info->s->base.auto_key-1].seg;
507
518
const uchar *key= (uchar*) record + keyseg->start;
509
520
switch (keyseg->type) {
510
521
case HA_KEYTYPE_INT8:
511
s_value= (int64_t) *(char*)key;
522
s_value= (longlong) *(char*)key;
513
524
case HA_KEYTYPE_BINARY:
514
value=(uint64_t) *(uchar*) key;
525
value=(ulonglong) *(uchar*) key;
516
527
case HA_KEYTYPE_SHORT_INT:
517
s_value= (int64_t) sint2korr(key);
528
s_value= (longlong) sint2korr(key);
519
530
case HA_KEYTYPE_USHORT_INT:
520
value=(uint64_t) uint2korr(key);
531
value=(ulonglong) uint2korr(key);
522
533
case HA_KEYTYPE_LONG_INT:
523
s_value= (int64_t) sint4korr(key);
534
s_value= (longlong) sint4korr(key);
525
536
case HA_KEYTYPE_ULONG_INT:
526
value=(uint64_t) uint4korr(key);
537
value=(ulonglong) uint4korr(key);
528
539
case HA_KEYTYPE_INT24:
529
s_value= (int64_t) sint3korr(key);
540
s_value= (longlong) sint3korr(key);
531
542
case HA_KEYTYPE_UINT24:
532
value=(uint64_t) uint3korr(key);
543
value=(ulonglong) uint3korr(key);
534
545
case HA_KEYTYPE_FLOAT: /* This shouldn't be used */
537
548
float4get(f_1,key);
538
549
/* Ignore negative values */
539
value = (f_1 < (float) 0.0) ? 0 : (uint64_t) f_1;
550
value = (f_1 < (float) 0.0) ? 0 : (ulonglong) f_1;
542
553
case HA_KEYTYPE_DOUBLE: /* This shouldn't be used */