~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/blitzdb/blitzcmp.cc

Merge Joe, plus I updated the tests.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
18
 */
19
19
 
20
 
#include "config.h"
 
20
#include <config.h>
21
21
#include "ha_blitz.h"
22
22
 
23
23
using namespace drizzled;
35
35
  /* For now, we are only interested in supporting a PRIMARY KEY. In the
36
36
     next phase of BlitzDB, this should loop through the key array. */
37
37
  if (share->primary_key_exists) {
38
 
    KeyInfo *pk = &getTable()->key_info[getTable()->getShare()->getPrimaryKey()];
 
38
    KeyInfo *pk = &table->key_info[table->s->getPrimaryKey()];
39
39
    KeyPartInfo *key_part = pk->key_part;
40
40
    KeyPartInfo *key_part_end = key_part + pk->key_parts;
41
41
    int key_changed = 0;
67
67
       would violate the unique contraint. */
68
68
    if (key_changed) {
69
69
      key = key_buffer;
70
 
      key_len = make_index_key(key, getTable()->getMutableShare()->getPrimaryKey(), new_row);
 
70
      key_len = make_index_key(key, table->s->getPrimaryKey(), new_row);
71
71
      fetched = share->dict.get_row(key, key_len, &fetched_len);
72
72
 
73
73
      /* Key Exists. It's a violation. */
74
74
      if (fetched != NULL) {
75
75
        free(fetched);
76
 
        this->errkey_id = getTable()->getShare()->getPrimaryKey();
 
76
        this->errkey_id = table->s->getPrimaryKey();
77
77
        return HA_ERR_FOUND_DUPP_KEY;
78
78
      }
79
79
    }
240
240
      a_next_offset = b_next_offset = curr_part->length;
241
241
      break;
242
242
    }
 
243
    case HA_KEYTYPE_UINT24: {
 
244
      uint32_t a_int_val = uint3korr(a_pos);
 
245
      uint32_t b_int_val = uint3korr(b_pos);
 
246
 
 
247
      *a_compared_len += curr_part->length;
 
248
      *b_compared_len += curr_part->length;
 
249
 
 
250
      if (a_int_val < b_int_val)
 
251
        return -1;
 
252
      else if (a_int_val > b_int_val)
 
253
        return 1;
 
254
 
 
255
      a_next_offset = b_next_offset = curr_part->length;
 
256
      break;
 
257
    }
243
258
    case HA_KEYTYPE_DOUBLE: {
244
259
      double a_double_val, b_double_val;
245
260
      float8get(a_double_val, a_pos);
256
271
      a_next_offset = b_next_offset = curr_part->length;
257
272
      break;
258
273
    }
259
 
    case HA_KEYTYPE_VARTEXT1:
 
274
    case HA_KEYTYPE_VARTEXT1: {
 
275
      uint8_t a_varchar_len = *(uint8_t *)a_pos;
 
276
      uint8_t b_varchar_len = *(uint8_t *)b_pos;
 
277
      int key_changed;
 
278
 
 
279
      a_pos++;
 
280
      b_pos++;
 
281
 
 
282
      *a_compared_len += a_varchar_len + sizeof(a_varchar_len);
 
283
      *b_compared_len += b_varchar_len + sizeof(b_varchar_len);
 
284
 
 
285
      /* Compare the texts by respecting collation. */
 
286
      key_changed = my_strnncoll(&my_charset_utf8_general_ci,
 
287
                                 (unsigned char *)a_pos, a_varchar_len,
 
288
                                 (unsigned char *)b_pos, b_varchar_len);
 
289
      if (key_changed < 0)
 
290
        return -1;
 
291
      else if (key_changed > 0)
 
292
        return 1;
 
293
 
 
294
      a_next_offset = a_varchar_len;
 
295
      b_next_offset = b_varchar_len;
 
296
      break;
 
297
    }
260
298
    case HA_KEYTYPE_VARTEXT2: {
261
299
      uint16_t a_varchar_len = uint2korr(a_pos);
262
300
      uint16_t b_varchar_len = uint2korr(b_pos);