diff --git a/storage/tokudb/hatoku_cmp.cc b/storage/tokudb/hatoku_cmp.cc index 765b0033a47..d687068e569 100755 --- a/storage/tokudb/hatoku_cmp.cc +++ b/storage/tokudb/hatoku_cmp.cc @@ -1408,7 +1408,19 @@ int tokudb_cmp_dbt_key(DB *file, const DBT *keya, const DBT *keyb) { int tokudb_cmp_dbt_data(DB *file, const DBT *keya, const DBT *keyb) { int row_desc_offset = *(u_int32_t *)file->descriptor->data; - int cmp = tokudb_compare_two_keys( + int cmp; + // + // for no_dup tables, file->descriptor->size == row_desc_offset + // so just use a default comparison function + // + if (file->descriptor->size - row_desc_offset == 0) { + return memcmp( + keya->data, + keyb->data, + (keya->size < keyb->size) ? keya->size : keyb->size + ); + } + cmp = tokudb_compare_two_keys( keya->data, keya->size, keyb->data, diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 2605928eddb..b3fa5d06f1b 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -189,6 +189,21 @@ static int tokudb_init_func(void *p) { db_env->set_errcall(db_env, tokudb_print_error); db_env->set_errpfx(db_env, "TokuDB"); + // + // set default comparison functions + // + r = db_env->set_default_bt_compare(db_env, tokudb_cmp_dbt_key); + if (r) { + DBUG_PRINT("info", ("set_default_bt_compare%d\n", r)); + goto error; + } + r = db_env->set_default_dup_compare(db_env, tokudb_cmp_dbt_data); + if (r) { + DBUG_PRINT("info", ("set_default_dup_compare%d\n", r)); + goto error; + } + + // config directories #if 0 DBUG_PRINT("info", ("tokudb_tmpdir: %s\n", tokudb_tmpdir));