Commit eb891d74 authored by Rich Prohaska's avatar Rich Prohaska Committed by Yoni Fogel

add PREFIX_KEY_OR_PREV index match. closes #488

git-svn-id: file:///svn/mysql/tokudb-engine/src@3009 c7de825b-a66e-492c-adef-691d508d4ae1
parent 0a8c2c08
...@@ -63,8 +63,17 @@ typedef struct st_tokudb_trx_data { ...@@ -63,8 +63,17 @@ typedef struct st_tokudb_trx_data {
// tokudb debug tracing // tokudb debug tracing
#define TOKUDB_DEBUG_OPEN 1 #define TOKUDB_DEBUG_OPEN 1
#define TOKUDB_DEBUG_TXN 2 #define TOKUDB_DEBUG_ERROR 2
#define TOKUDB_DEBUG_AUTO_INCREMENT 4 #define TOKUDB_DEBUG_TXN 4
#define TOKUDB_DEBUG_AUTO_INCREMENT 8
#define TOKUDB_DBUG_RETURN(r) \
{ \
int rr = (r); \
if (rr != 0 && (tokudb_debug & TOKUDB_DEBUG_ERROR)) \
printf("%d:%s:%d:return:%d\n", my_tid(), __FILE__, __LINE__, rr); \
DBUG_RETURN(rr); \
}
const char *ha_tokudb_ext = ".tokudb"; const char *ha_tokudb_ext = ".tokudb";
...@@ -311,7 +320,7 @@ static int tokudb_done_func(void *p) { ...@@ -311,7 +320,7 @@ static int tokudb_done_func(void *p) {
pthread_mutex_destroy(&tokudb_mutex); pthread_mutex_destroy(&tokudb_mutex);
pthread_key_delete(tokudb_thr_private); pthread_key_delete(tokudb_thr_private);
DBUG_RETURN(0); TOKUDB_DBUG_RETURN(0);
} }
/** @brief /** @brief
...@@ -417,7 +426,7 @@ int tokudb_end(handlerton * hton, ha_panic_function type) { ...@@ -417,7 +426,7 @@ int tokudb_end(handlerton * hton, ha_panic_function type) {
error = db_env->close(db_env, 0); // Error is logged error = db_env->close(db_env, 0); // Error is logged
db_env = 0; db_env = 0;
} }
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
static int tokudb_close_connection(handlerton * hton, THD * thd) { static int tokudb_close_connection(handlerton * hton, THD * thd) {
...@@ -437,7 +446,7 @@ bool tokudb_flush_logs(handlerton * hton) { ...@@ -437,7 +446,7 @@ bool tokudb_flush_logs(handlerton * hton) {
my_error(ER_ERROR_DURING_CHECKPOINT, MYF(0), error); my_error(ER_ERROR_DURING_CHECKPOINT, MYF(0), error);
result = 1; result = 1;
} }
DBUG_RETURN(result); TOKUDB_DBUG_RETURN(result);
} }
static int tokudb_commit(handlerton * hton, THD * thd, bool all) { static int tokudb_commit(handlerton * hton, THD * thd, bool all) {
...@@ -457,7 +466,7 @@ static int tokudb_commit(handlerton * hton, THD * thd, bool all) { ...@@ -457,7 +466,7 @@ static int tokudb_commit(handlerton * hton, THD * thd, bool all) {
} else } else
if (tokudb_debug & TOKUDB_DEBUG_TXN) if (tokudb_debug & TOKUDB_DEBUG_TXN)
printf("%d:%s:%d:commit0\n", my_tid(), __FILE__, __LINE__); printf("%d:%s:%d:commit0\n", my_tid(), __FILE__, __LINE__);
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
static int tokudb_rollback(handlerton * hton, THD * thd, bool all) { static int tokudb_rollback(handlerton * hton, THD * thd, bool all) {
...@@ -476,7 +485,7 @@ static int tokudb_rollback(handlerton * hton, THD * thd, bool all) { ...@@ -476,7 +485,7 @@ static int tokudb_rollback(handlerton * hton, THD * thd, bool all) {
} else } else
if (tokudb_debug & TOKUDB_DEBUG_TXN) if (tokudb_debug & TOKUDB_DEBUG_TXN)
printf("%d:%s:%d:abort0\n", my_tid(), __FILE__, __LINE__); printf("%d:%s:%d:abort0\n", my_tid(), __FILE__, __LINE__);
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
#if 0 #if 0
...@@ -489,7 +498,7 @@ static int tokudb_savepoint(handlerton * hton, THD * thd, void *savepoint) { ...@@ -489,7 +498,7 @@ static int tokudb_savepoint(handlerton * hton, THD * thd, void *savepoint) {
if (!(error = db_env->txn_begin(db_env, trx->sp_level, save_txn, 0))) { if (!(error = db_env->txn_begin(db_env, trx->sp_level, save_txn, 0))) {
trx->sp_level = *save_txn; trx->sp_level = *save_txn;
} }
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
static int tokudb_rollback_to_savepoint(handlerton * hton, THD * thd, void *savepoint) { static int tokudb_rollback_to_savepoint(handlerton * hton, THD * thd, void *savepoint) {
...@@ -502,7 +511,7 @@ static int tokudb_rollback_to_savepoint(handlerton * hton, THD * thd, void *save ...@@ -502,7 +511,7 @@ static int tokudb_rollback_to_savepoint(handlerton * hton, THD * thd, void *save
trx->sp_level = parent; trx->sp_level = parent;
error = tokudb_savepoint(hton, thd, savepoint); error = tokudb_savepoint(hton, thd, savepoint);
} }
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
static int tokudb_release_savepoint(handlerton * hton, THD * thd, void *savepoint) { static int tokudb_release_savepoint(handlerton * hton, THD * thd, void *savepoint) {
...@@ -515,7 +524,7 @@ static int tokudb_release_savepoint(handlerton * hton, THD * thd, void *savepoin ...@@ -515,7 +524,7 @@ static int tokudb_release_savepoint(handlerton * hton, THD * thd, void *savepoin
trx->sp_level = parent; trx->sp_level = parent;
*save_txn = 0; *save_txn = 0;
} }
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
#endif #endif
...@@ -558,7 +567,7 @@ static bool tokudb_show_logs(THD * thd, stat_print_fn * stat_print) { ...@@ -558,7 +567,7 @@ static bool tokudb_show_logs(THD * thd, stat_print_fn * stat_print) {
free(free_logs); free(free_logs);
free_root(&show_logs_root, MYF(0)); free_root(&show_logs_root, MYF(0));
*root_ptr = old_mem_root; *root_ptr = old_mem_root;
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
bool tokudb_show_status(handlerton * hton, THD * thd, stat_print_fn * stat_print, enum ha_stat_type stat_type) { bool tokudb_show_status(handlerton * hton, THD * thd, stat_print_fn * stat_print, enum ha_stat_type stat_type) {
...@@ -768,17 +777,17 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) { ...@@ -768,17 +777,17 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) {
&key_buff2, max_key_length, &key_buff2, max_key_length,
&primary_key_buff, (hidden_primary_key ? 0 : table_share->key_info[table_share->primary_key].key_length), &primary_key_buff, (hidden_primary_key ? 0 : table_share->key_info[table_share->primary_key].key_length),
NullS))) NullS)))
DBUG_RETURN(1); TOKUDB_DBUG_RETURN(1);
if (!(rec_buff = (uchar *) my_malloc((alloced_rec_buff_length = table_share->rec_buff_length), MYF(MY_WME)))) { if (!(rec_buff = (uchar *) my_malloc((alloced_rec_buff_length = table_share->rec_buff_length), MYF(MY_WME)))) {
my_free(alloc_ptr, MYF(0)); my_free(alloc_ptr, MYF(0));
DBUG_RETURN(1); TOKUDB_DBUG_RETURN(1);
} }
/* Init shared structure */ /* Init shared structure */
if (!(share = get_share(name, table))) { if (!(share = get_share(name, table))) {
my_free((char *) rec_buff, MYF(0)); my_free((char *) rec_buff, MYF(0));
my_free(alloc_ptr, MYF(0)); my_free(alloc_ptr, MYF(0));
DBUG_RETURN(1); TOKUDB_DBUG_RETURN(1);
} }
thr_lock_data_init(&share->lock, &lock, NULL); thr_lock_data_init(&share->lock, &lock, NULL);
key_file = share->key_file; key_file = share->key_file;
...@@ -798,7 +807,7 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) { ...@@ -798,7 +807,7 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) {
my_free((char *) rec_buff, MYF(0)); my_free((char *) rec_buff, MYF(0));
my_free(alloc_ptr, MYF(0)); my_free(alloc_ptr, MYF(0));
my_errno = error; my_errno = error;
DBUG_RETURN(1); TOKUDB_DBUG_RETURN(1);
} }
share->file = file; share->file = file;
...@@ -813,7 +822,7 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) { ...@@ -813,7 +822,7 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) {
my_free((char *) rec_buff, MYF(0)); my_free((char *) rec_buff, MYF(0));
my_free(alloc_ptr, MYF(0)); my_free(alloc_ptr, MYF(0));
my_errno = error; my_errno = error;
DBUG_RETURN(1); TOKUDB_DBUG_RETURN(1);
} }
/* Open other keys; These are part of the share structure */ /* Open other keys; These are part of the share structure */
...@@ -827,7 +836,7 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) { ...@@ -827,7 +836,7 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) {
if ((error = db_create(ptr, db_env, 0))) { if ((error = db_create(ptr, db_env, 0))) {
__close(1); __close(1);
my_errno = error; my_errno = error;
DBUG_RETURN(1); TOKUDB_DBUG_RETURN(1);
} }
sprintf(part, "key%d", ++used_keys); sprintf(part, "key%d", ++used_keys);
make_name(newname, name, part); make_name(newname, name, part);
...@@ -842,7 +851,7 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) { ...@@ -842,7 +851,7 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) {
if ((error = (*ptr)->open(*ptr, 0, name_buff, part, DB_BTREE, open_flags + DB_AUTO_COMMIT, 0))) { if ((error = (*ptr)->open(*ptr, 0, name_buff, part, DB_BTREE, open_flags + DB_AUTO_COMMIT, 0))) {
__close(1); __close(1);
my_errno = error; my_errno = error;
DBUG_RETURN(1); TOKUDB_DBUG_RETURN(1);
} }
} }
} }
...@@ -872,13 +881,13 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) { ...@@ -872,13 +881,13 @@ int ha_tokudb::open(const char *name, int mode, uint test_if_locked) {
get_status(); get_status();
info(HA_STATUS_NO_LOCK | HA_STATUS_VARIABLE | HA_STATUS_CONST); info(HA_STATUS_NO_LOCK | HA_STATUS_VARIABLE | HA_STATUS_CONST);
DBUG_RETURN(0); TOKUDB_DBUG_RETURN(0);
} }
int ha_tokudb::close(void) { int ha_tokudb::close(void) {
DBUG_ENTER("ha_tokudb::close"); DBUG_ENTER("ha_tokudb::close");
TOKUDB_CLOSE(); TOKUDB_CLOSE();
DBUG_RETURN(__close(0)); TOKUDB_DBUG_RETURN(__close(0));
} }
int ha_tokudb::__close(int mutex_is_locked) { int ha_tokudb::__close(int mutex_is_locked) {
...@@ -888,7 +897,7 @@ int ha_tokudb::__close(int mutex_is_locked) { ...@@ -888,7 +897,7 @@ int ha_tokudb::__close(int mutex_is_locked) {
my_free(rec_buff, MYF(MY_ALLOW_ZERO_PTR)); my_free(rec_buff, MYF(MY_ALLOW_ZERO_PTR));
my_free(alloc_ptr, MYF(MY_ALLOW_ZERO_PTR)); my_free(alloc_ptr, MYF(MY_ALLOW_ZERO_PTR));
ha_tokudb::reset(); // current_row buffer ha_tokudb::reset(); // current_row buffer
DBUG_RETURN(free_share(share, table, hidden_primary_key, mutex_is_locked)); TOKUDB_DBUG_RETURN(free_share(share, table, hidden_primary_key, mutex_is_locked));
} }
/* Reallocate buffer if needed */ /* Reallocate buffer if needed */
...@@ -1207,7 +1216,7 @@ static int write_status(DB * status_block, char *buff, uint length) { ...@@ -1207,7 +1216,7 @@ static int write_status(DB * status_block, char *buff, uint length) {
key.size = sizeof(key_buff); key.size = sizeof(key_buff);
row.size = length; row.size = length;
error = status_block->put(status_block, 0, &key, &row, 0); error = status_block->put(status_block, 0, &key, &row, 0);
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
static void update_status(TOKUDB_SHARE * share, TABLE * table) { static void update_status(TOKUDB_SHARE * share, TABLE * table) {
...@@ -1296,7 +1305,7 @@ int ha_tokudb::write_row(uchar * record) { ...@@ -1296,7 +1305,7 @@ int ha_tokudb::write_row(uchar * record) {
if (table->next_number_field && record == table->record[0]) if (table->next_number_field && record == table->record[0])
update_auto_increment(); update_auto_increment();
if ((error = pack_row(&row, (const uchar *) record, 1))) if ((error = pack_row(&row, (const uchar *) record, 1)))
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
u_int32_t put_flags = key_type[primary_key]; u_int32_t put_flags = key_type[primary_key];
THD *thd = ha_thd(); THD *thd = ha_thd();
...@@ -1356,7 +1365,7 @@ int ha_tokudb::write_row(uchar * record) { ...@@ -1356,7 +1365,7 @@ int ha_tokudb::write_row(uchar * record) {
error = HA_ERR_FOUND_DUPP_KEY; error = HA_ERR_FOUND_DUPP_KEY;
else if (!error) else if (!error)
changed_rows++; changed_rows++;
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
/* Compare if a key in a row has changed */ /* Compare if a key in a row has changed */
...@@ -1412,7 +1421,7 @@ int ha_tokudb::update_primary_key(DB_TXN * trans, bool primary_key_changed, cons ...@@ -1412,7 +1421,7 @@ int ha_tokudb::update_primary_key(DB_TXN * trans, bool primary_key_changed, cons
if (!(error = pack_row(&row, new_row, 0))) if (!(error = pack_row(&row, new_row, 0)))
error = file->put(file, trans, new_key, &row, 0); error = file->put(file, trans, new_key, &row, 0);
} }
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
/* /*
...@@ -1449,7 +1458,7 @@ int ha_tokudb::restore_keys(DB_TXN * trans, key_map * changed_keys, uint primary ...@@ -1449,7 +1458,7 @@ int ha_tokudb::restore_keys(DB_TXN * trans, key_map * changed_keys, uint primary
err: err:
DBUG_ASSERT(error != DB_KEYEXIST); DBUG_ASSERT(error != DB_KEYEXIST);
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
int ha_tokudb::update_row(const uchar * old_row, uchar * new_row) { int ha_tokudb::update_row(const uchar * old_row, uchar * new_row) {
...@@ -1490,7 +1499,7 @@ int ha_tokudb::update_row(const uchar * old_row, uchar * new_row) { ...@@ -1490,7 +1499,7 @@ int ha_tokudb::update_row(const uchar * old_row, uchar * new_row) {
continue; continue;
if (key_cmp(keynr, old_row, new_row) || primary_key_changed) { if (key_cmp(keynr, old_row, new_row) || primary_key_changed) {
if ((error = remove_key(sub_trans, keynr, old_row, &old_prim_key))) { if ((error = remove_key(sub_trans, keynr, old_row, &old_prim_key))) {
DBUG_RETURN(error); // Fatal error TOKUDB_DBUG_RETURN(error); // Fatal error
} }
changed_keys.set_bit(keynr); changed_keys.set_bit(keynr);
if ((error = key_file[keynr]->put(key_file[keynr], sub_trans, create_key(&key, keynr, key_buff2, new_row), &prim_key, key_type[keynr]))) { if ((error = key_file[keynr]->put(key_file[keynr], sub_trans, create_key(&key, keynr, key_buff2, new_row), &prim_key, key_type[keynr]))) {
...@@ -1519,7 +1528,7 @@ int ha_tokudb::update_row(const uchar * old_row, uchar * new_row) { ...@@ -1519,7 +1528,7 @@ int ha_tokudb::update_row(const uchar * old_row, uchar * new_row) {
} }
if (error == DB_KEYEXIST) if (error == DB_KEYEXIST)
error = HA_ERR_FOUND_DUPP_KEY; error = HA_ERR_FOUND_DUPP_KEY;
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
/* /*
...@@ -1557,7 +1566,7 @@ int ha_tokudb::remove_key(DB_TXN * trans, uint keynr, const uchar * record, DBT ...@@ -1557,7 +1566,7 @@ int ha_tokudb::remove_key(DB_TXN * trans, uint keynr, const uchar * record, DBT
error = result; error = result;
} }
} }
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
/* Delete all keys for new_record */ /* Delete all keys for new_record */
...@@ -1583,7 +1592,7 @@ int ha_tokudb::delete_row(const uchar * record) { ...@@ -1583,7 +1592,7 @@ int ha_tokudb::delete_row(const uchar * record) {
statistic_increment(table->in_use->status_var.ha_delete_count, &LOCK_status); statistic_increment(table->in_use->status_var.ha_delete_count, &LOCK_status);
if ((error = pack_row(&row, record, 0))) if ((error = pack_row(&row, record, 0)))
DBUG_RETURN((error)); TOKUDB_DBUG_RETURN((error));
create_key(&prim_key, primary_key, key_buff, record); create_key(&prim_key, primary_key, key_buff, record);
if (hidden_primary_key) if (hidden_primary_key)
keys.set_bit(primary_key); keys.set_bit(primary_key);
...@@ -1604,7 +1613,7 @@ int ha_tokudb::delete_row(const uchar * record) { ...@@ -1604,7 +1613,7 @@ int ha_tokudb::delete_row(const uchar * record) {
if (!error) if (!error)
changed_rows--; changed_rows--;
#endif #endif
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
int ha_tokudb::index_init(uint keynr, bool sorted) { int ha_tokudb::index_init(uint keynr, bool sorted) {
...@@ -1626,7 +1635,7 @@ int ha_tokudb::index_init(uint keynr, bool sorted) { ...@@ -1626,7 +1635,7 @@ int ha_tokudb::index_init(uint keynr, bool sorted) {
if ((error = key_file[keynr]->cursor(key_file[keynr], transaction, &cursor, table->reginfo.lock_type > TL_WRITE_ALLOW_READ ? 0 : 0))) if ((error = key_file[keynr]->cursor(key_file[keynr], transaction, &cursor, table->reginfo.lock_type > TL_WRITE_ALLOW_READ ? 0 : 0)))
cursor = 0; // Safety cursor = 0; // Safety
bzero((void *) &last_key, sizeof(last_key)); bzero((void *) &last_key, sizeof(last_key));
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
int ha_tokudb::index_end() { int ha_tokudb::index_end() {
...@@ -1638,7 +1647,7 @@ int ha_tokudb::index_end() { ...@@ -1638,7 +1647,7 @@ int ha_tokudb::index_end() {
cursor = 0; cursor = 0;
} }
active_index = MAX_KEY; active_index = MAX_KEY;
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
/* What to do after we have read a row based on an index */ /* What to do after we have read a row based on an index */
...@@ -1648,7 +1657,7 @@ int ha_tokudb::read_row(int error, uchar * buf, uint keynr, DBT * row, DBT * fou ...@@ -1648,7 +1657,7 @@ int ha_tokudb::read_row(int error, uchar * buf, uint keynr, DBT * row, DBT * fou
if (error == DB_NOTFOUND || error == DB_KEYEMPTY) if (error == DB_NOTFOUND || error == DB_KEYEMPTY)
error = read_next ? HA_ERR_END_OF_FILE : HA_ERR_KEY_NOT_FOUND; error = read_next ? HA_ERR_END_OF_FILE : HA_ERR_KEY_NOT_FOUND;
table->status = STATUS_NOT_FOUND; table->status = STATUS_NOT_FOUND;
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
if (hidden_primary_key) if (hidden_primary_key)
memcpy_fixed(current_ident, (char *) row->data + row->size - TOKUDB_HIDDEN_PRIMARY_KEY_LENGTH, TOKUDB_HIDDEN_PRIMARY_KEY_LENGTH); memcpy_fixed(current_ident, (char *) row->data + row->size - TOKUDB_HIDDEN_PRIMARY_KEY_LENGTH, TOKUDB_HIDDEN_PRIMARY_KEY_LENGTH);
...@@ -1659,7 +1668,7 @@ int ha_tokudb::read_row(int error, uchar * buf, uint keynr, DBT * row, DBT * fou ...@@ -1659,7 +1668,7 @@ int ha_tokudb::read_row(int error, uchar * buf, uint keynr, DBT * row, DBT * fou
unpack_key(buf, found_key, keynr); unpack_key(buf, found_key, keynr);
if (!hidden_primary_key) if (!hidden_primary_key)
unpack_key(buf, row, primary_key); unpack_key(buf, row, primary_key);
DBUG_RETURN(0); TOKUDB_DBUG_RETURN(0);
} }
DBT key; DBT key;
bzero((void *) &key, sizeof(key)); bzero((void *) &key, sizeof(key));
...@@ -1670,12 +1679,12 @@ int ha_tokudb::read_row(int error, uchar * buf, uint keynr, DBT * row, DBT * fou ...@@ -1670,12 +1679,12 @@ int ha_tokudb::read_row(int error, uchar * buf, uint keynr, DBT * row, DBT * fou
current_row.flags = DB_DBT_REALLOC; current_row.flags = DB_DBT_REALLOC;
if ((error = file->get(file, transaction, &key, &current_row, 0))) { if ((error = file->get(file, transaction, &key, &current_row, 0))) {
table->status = STATUS_NOT_FOUND; table->status = STATUS_NOT_FOUND;
DBUG_RETURN(error == DB_NOTFOUND ? HA_ERR_CRASHED : error); TOKUDB_DBUG_RETURN(error == DB_NOTFOUND ? HA_ERR_CRASHED : error);
} }
row = &current_row; row = &current_row;
} }
unpack_row(buf, row); unpack_row(buf, row);
DBUG_RETURN(0); TOKUDB_DBUG_RETURN(0);
} }
/* /*
...@@ -1686,7 +1695,7 @@ int ha_tokudb::index_read_idx(uchar * buf, uint keynr, const uchar * key, uint k ...@@ -1686,7 +1695,7 @@ int ha_tokudb::index_read_idx(uchar * buf, uint keynr, const uchar * key, uint k
table->in_use->status_var.ha_read_key_count++; table->in_use->status_var.ha_read_key_count++;
current_row.flags = DB_DBT_REALLOC; current_row.flags = DB_DBT_REALLOC;
active_index = MAX_KEY; active_index = MAX_KEY;
DBUG_RETURN(read_row(key_file[keynr]->get(key_file[keynr], transaction, pack_key(&last_key, keynr, key_buff, key, key_len), &current_row, 0), buf, keynr, &current_row, &last_key, 0)); TOKUDB_DBUG_RETURN(read_row(key_file[keynr]->get(key_file[keynr], transaction, pack_key(&last_key, keynr, key_buff, key, key_len), &current_row, 0), buf, keynr, &current_row, &last_key, 0));
} }
int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_rkey_function find_flag) { int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_rkey_function find_flag) {
...@@ -1707,9 +1716,14 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_ ...@@ -1707,9 +1716,14 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
error = cursor->c_get(cursor, &last_key, &row, DB_SET_RANGE); error = cursor->c_get(cursor, &last_key, &row, DB_SET_RANGE);
if (error == 0) { if (error == 0) {
DBT orig_key; DBT orig_key;
for (;;) {
pack_key(&orig_key, active_index, key_buff2, key, key_len); pack_key(&orig_key, active_index, key_buff2, key, key_len);
if (tokudb_cmp_packed_key(share->key_file[active_index], &orig_key, &last_key) == 0) if (tokudb_cmp_packed_key(share->key_file[active_index], &orig_key, &last_key) != 0)
error = cursor->c_get(cursor, &last_key, &row, DB_NEXT_NODUP); break;
error = cursor->c_get(cursor, &last_key, &row, DB_NEXT);
if (error != 0)
break;
}
} }
error = read_row(error, buf, active_index, &row, 0, 0); error = read_row(error, buf, active_index, &row, 0, 0);
break; break;
...@@ -1719,7 +1733,7 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_ ...@@ -1719,7 +1733,7 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
error = cursor->c_get(cursor, &last_key, &row, DB_PREV); error = cursor->c_get(cursor, &last_key, &row, DB_PREV);
else else
error = cursor->c_get(cursor, &last_key, &row, DB_LAST); error = cursor->c_get(cursor, &last_key, &row, DB_LAST);
assert(0); error = read_row(error, buf, active_index, &row, 0, 0);
break; break;
case HA_READ_KEY_OR_NEXT: case HA_READ_KEY_OR_NEXT:
error = cursor->c_get(cursor, &last_key, &row, DB_SET_RANGE); error = cursor->c_get(cursor, &last_key, &row, DB_SET_RANGE);
...@@ -1731,17 +1745,37 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_ ...@@ -1731,17 +1745,37 @@ int ha_tokudb::index_read(uchar * buf, const uchar * key, uint key_len, enum ha_
DBT orig_key; DBT orig_key;
pack_key(&orig_key, active_index, key_buff2, key, key_len); pack_key(&orig_key, active_index, key_buff2, key, key_len);
if (tokudb_cmp_packed_key(share->key_file[active_index], &orig_key, &last_key) != 0) if (tokudb_cmp_packed_key(share->key_file[active_index], &orig_key, &last_key) != 0)
error = cursor->c_get(cursor, &last_key, &row, DB_PREV_NODUP); error = cursor->c_get(cursor, &last_key, &row, DB_PREV);
} else } else
error = cursor->c_get(cursor, &last_key, &row, DB_LAST); error = cursor->c_get(cursor, &last_key, &row, DB_LAST);
assert(0); error = read_row(error, buf, active_index, &row, 0, 0);
break;
case HA_READ_PREFIX_LAST_OR_PREV:
error = cursor->c_get(cursor, &last_key, &row, DB_SET_RANGE);
if (error == 0) {
DBT orig_key;
for (;;) {
pack_key(&orig_key, active_index, key_buff2, key, key_len);
if (tokudb_cmp_packed_key(share->key_file[active_index], &orig_key, &last_key) != 0)
break;
error = cursor->c_get(cursor, &last_key, &row, DB_NEXT);
if (error != 0)
break;
}
if (error == 0)
error = cursor->c_get(cursor, &last_key, &row, DB_PREV);
}
error = read_row(error, buf, active_index, &row, 0, 0);
break; break;
default: default:
assert(0); // QQQ others? printf("%d:%s:%d:unsupported:%d\n", my_tid(), __FILE__, __LINE__, find_flag);
error = HA_ERR_UNSUPPORTED;
break; break;
} }
DBUG_RETURN(error); if (error && (tokudb_debug & TOKUDB_DEBUG_ERROR))
printf("%d:%s:%d:error:%d:%d\n", my_tid(), __FILE__, __LINE__, error, find_flag);
TOKUDB_DBUG_RETURN(error);
} }
/* /*
...@@ -1768,7 +1802,7 @@ int ha_tokudb::index_read_last(uchar * buf, const uchar * key, uint key_len) { ...@@ -1768,7 +1802,7 @@ int ha_tokudb::index_read_last(uchar * buf, const uchar * key, uint key_len) {
bzero((void *) &row, sizeof(row)); bzero((void *) &row, sizeof(row));
if (read_row(cursor->c_get(cursor, &last_key, &row, DB_PREV), buf, active_index, &row, &last_key, 1) || tokudb_key_cmp(table, key_info, key_buff2, key_len)) if (read_row(cursor->c_get(cursor, &last_key, &row, DB_PREV), buf, active_index, &row, &last_key, 1) || tokudb_key_cmp(table, key_info, key_buff2, key_len))
error = HA_ERR_KEY_NOT_FOUND; error = HA_ERR_KEY_NOT_FOUND;
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
...@@ -1777,7 +1811,7 @@ int ha_tokudb::index_next(uchar * buf) { ...@@ -1777,7 +1811,7 @@ int ha_tokudb::index_next(uchar * buf) {
DBT row; DBT row;
statistic_increment(table->in_use->status_var.ha_read_next_count, &LOCK_status); statistic_increment(table->in_use->status_var.ha_read_next_count, &LOCK_status);
bzero((void *) &row, sizeof(row)); bzero((void *) &row, sizeof(row));
DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_NEXT), buf, active_index, &row, &last_key, 1)); TOKUDB_DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_NEXT), buf, active_index, &row, &last_key, 1));
} }
int ha_tokudb::index_next_same(uchar * buf, const uchar * key, uint keylen) { int ha_tokudb::index_next_same(uchar * buf, const uchar * key, uint keylen) {
...@@ -1786,14 +1820,24 @@ int ha_tokudb::index_next_same(uchar * buf, const uchar * key, uint keylen) { ...@@ -1786,14 +1820,24 @@ int ha_tokudb::index_next_same(uchar * buf, const uchar * key, uint keylen) {
int error; int error;
statistic_increment(table->in_use->status_var.ha_read_next_count, &LOCK_status); statistic_increment(table->in_use->status_var.ha_read_next_count, &LOCK_status);
bzero((void *) &row, sizeof(row)); bzero((void *) &row, sizeof(row));
if (keylen == table->key_info[active_index].key_length && !(table->key_info[active_index].flags & HA_END_SPACE_KEY)) #if 1 /* NEXT_DUP on nodup returns EINVAL for tokudb */
error = read_row(cursor->c_get(cursor, &last_key, &row, DB_NEXT_DUP), buf, active_index, &row, &last_key, 1); if (keylen == table->key_info[active_index].key_length && !(table->key_info[active_index].flags & HA_END_SPACE_KEY)) {
else { int next_flag = DB_NEXT_DUP;
if (table->key_info[active_index].flags & HA_NOSAME)
next_flag = DB_NEXT;
error = cursor->c_get(cursor, &last_key, &row, next_flag);
if (error == EINVAL)
printf("%d:%s:%d\n", my_tid(), __FILE__, __LINE__);
error = read_row(error, buf, active_index, &row, &last_key, 1);
} else {
#else
{
#endif
error = read_row(cursor->c_get(cursor, &last_key, &row, DB_NEXT), buf, active_index, &row, &last_key, 1); error = read_row(cursor->c_get(cursor, &last_key, &row, DB_NEXT), buf, active_index, &row, &last_key, 1);
if (!error &&::key_cmp_if_same(table, key, active_index, keylen)) if (!error &&::key_cmp_if_same(table, key, active_index, keylen))
error = HA_ERR_END_OF_FILE; error = HA_ERR_END_OF_FILE;
} }
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
int ha_tokudb::index_prev(uchar * buf) { int ha_tokudb::index_prev(uchar * buf) {
...@@ -1801,7 +1845,7 @@ int ha_tokudb::index_prev(uchar * buf) { ...@@ -1801,7 +1845,7 @@ int ha_tokudb::index_prev(uchar * buf) {
DBT row; DBT row;
statistic_increment(table->in_use->status_var.ha_read_prev_count, &LOCK_status); statistic_increment(table->in_use->status_var.ha_read_prev_count, &LOCK_status);
bzero((void *) &row, sizeof(row)); bzero((void *) &row, sizeof(row));
DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_PREV), buf, active_index, &row, &last_key, 1)); TOKUDB_DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_PREV), buf, active_index, &row, &last_key, 1));
} }
int ha_tokudb::index_first(uchar * buf) { int ha_tokudb::index_first(uchar * buf) {
...@@ -1809,7 +1853,7 @@ int ha_tokudb::index_first(uchar * buf) { ...@@ -1809,7 +1853,7 @@ int ha_tokudb::index_first(uchar * buf) {
DBT row; DBT row;
statistic_increment(table->in_use->status_var.ha_read_first_count, &LOCK_status); statistic_increment(table->in_use->status_var.ha_read_first_count, &LOCK_status);
bzero((void *) &row, sizeof(row)); bzero((void *) &row, sizeof(row));
DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_FIRST), buf, active_index, &row, &last_key, 1)); TOKUDB_DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_FIRST), buf, active_index, &row, &last_key, 1));
} }
int ha_tokudb::index_last(uchar * buf) { int ha_tokudb::index_last(uchar * buf) {
...@@ -1817,13 +1861,13 @@ int ha_tokudb::index_last(uchar * buf) { ...@@ -1817,13 +1861,13 @@ int ha_tokudb::index_last(uchar * buf) {
DBT row; DBT row;
statistic_increment(table->in_use->status_var.ha_read_last_count, &LOCK_status); statistic_increment(table->in_use->status_var.ha_read_last_count, &LOCK_status);
bzero((void *) &row, sizeof(row)); bzero((void *) &row, sizeof(row));
DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_LAST), buf, active_index, &row, &last_key, 0)); TOKUDB_DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_LAST), buf, active_index, &row, &last_key, 0));
} }
int ha_tokudb::rnd_init(bool scan) { int ha_tokudb::rnd_init(bool scan) {
DBUG_ENTER("ha_tokudb::rnd_init"); DBUG_ENTER("ha_tokudb::rnd_init");
current_row.flags = DB_DBT_REALLOC; current_row.flags = DB_DBT_REALLOC;
DBUG_RETURN(index_init(primary_key, 0)); TOKUDB_DBUG_RETURN(index_init(primary_key, 0));
} }
int ha_tokudb::rnd_end() { int ha_tokudb::rnd_end() {
...@@ -1835,7 +1879,7 @@ int ha_tokudb::rnd_next(uchar * buf) { ...@@ -1835,7 +1879,7 @@ int ha_tokudb::rnd_next(uchar * buf) {
DBT row; DBT row;
statistic_increment(table->in_use->status_var.ha_read_rnd_next_count, &LOCK_status); statistic_increment(table->in_use->status_var.ha_read_rnd_next_count, &LOCK_status);
bzero((void *) &row, sizeof(row)); bzero((void *) &row, sizeof(row));
DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_NEXT), buf, primary_key, &row, &last_key, 1)); TOKUDB_DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_NEXT), buf, primary_key, &row, &last_key, 1));
} }
...@@ -1863,7 +1907,7 @@ int ha_tokudb::rnd_pos(uchar * buf, uchar * pos) { ...@@ -1863,7 +1907,7 @@ int ha_tokudb::rnd_pos(uchar * buf, uchar * pos) {
DBT db_pos; DBT db_pos;
statistic_increment(table->in_use->status_var.ha_read_rnd_count, &LOCK_status); statistic_increment(table->in_use->status_var.ha_read_rnd_count, &LOCK_status);
active_index = MAX_KEY; active_index = MAX_KEY;
DBUG_RETURN(read_row(file->get(file, transaction, get_pos(&db_pos, pos), &current_row, 0), buf, primary_key, &current_row, (DBT *) 0, 0)); TOKUDB_DBUG_RETURN(read_row(file->get(file, transaction, get_pos(&db_pos, pos), &current_row, 0), buf, primary_key, &current_row, (DBT *) 0, 0));
} }
/* /*
...@@ -1918,7 +1962,7 @@ int ha_tokudb::info(uint flag) { ...@@ -1918,7 +1962,7 @@ int ha_tokudb::info(uint flag) {
/* Don't return key if we got an error for the internal primary key */ /* Don't return key if we got an error for the internal primary key */
if (flag & HA_STATUS_ERRKEY && last_dup_key < table_share->keys) if (flag & HA_STATUS_ERRKEY && last_dup_key < table_share->keys)
errkey = last_dup_key; errkey = last_dup_key;
DBUG_RETURN(0); TOKUDB_DBUG_RETURN(0);
} }
...@@ -1975,7 +2019,7 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) { ...@@ -1975,7 +2019,7 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) {
thd->ha_data[tokudb_hton->slot] = trx = (tokudb_trx_data *) thd->ha_data[tokudb_hton->slot] = trx = (tokudb_trx_data *)
my_malloc(sizeof(*trx), MYF(MY_ZEROFILL)); my_malloc(sizeof(*trx), MYF(MY_ZEROFILL));
if (!trx) if (!trx)
DBUG_RETURN(1); TOKUDB_DBUG_RETURN(1);
} }
if (trx->all == 0) if (trx->all == 0)
trx->sp_level = 0; trx->sp_level = 0;
...@@ -1989,14 +2033,14 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) { ...@@ -1989,14 +2033,14 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) {
DBUG_PRINT("trans", ("starting transaction all: options: 0x%lx", (ulong) thd->options)); DBUG_PRINT("trans", ("starting transaction all: options: 0x%lx", (ulong) thd->options));
if ((error = db_env->txn_begin(db_env, NULL, &trx->all, 0))) { if ((error = db_env->txn_begin(db_env, NULL, &trx->all, 0))) {
trx->tokudb_lock_count--; // We didn't get the lock trx->tokudb_lock_count--; // We didn't get the lock
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
if (tokudb_debug & TOKUDB_DEBUG_TXN) if (tokudb_debug & TOKUDB_DEBUG_TXN)
printf("%d:%s:%d:master:%p\n", my_tid(), __FILE__, __LINE__, trx->all); printf("%d:%s:%d:master:%p\n", my_tid(), __FILE__, __LINE__, trx->all);
trx->sp_level = trx->all; trx->sp_level = trx->all;
trans_register_ha(thd, TRUE, tokudb_hton); trans_register_ha(thd, TRUE, tokudb_hton);
if (thd->in_lock_tables) if (thd->in_lock_tables)
DBUG_RETURN(0); // Don't create stmt trans TOKUDB_DBUG_RETURN(0); // Don't create stmt trans
} }
DBUG_PRINT("trans", ("starting transaction stmt")); DBUG_PRINT("trans", ("starting transaction stmt"));
if (trx->stmt) if (trx->stmt)
...@@ -2005,7 +2049,7 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) { ...@@ -2005,7 +2049,7 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) {
if ((error = db_env->txn_begin(db_env, trx->sp_level, &trx->stmt, 0))) { if ((error = db_env->txn_begin(db_env, trx->sp_level, &trx->stmt, 0))) {
/* We leave the possible master transaction open */ /* We leave the possible master transaction open */
trx->tokudb_lock_count--; // We didn't get the lock trx->tokudb_lock_count--; // We didn't get the lock
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
if (tokudb_debug & TOKUDB_DEBUG_TXN) if (tokudb_debug & TOKUDB_DEBUG_TXN)
printf("%d:%s:%d:stmt:%p:%p\n", my_tid(), __FILE__, __LINE__, trx->sp_level, trx->stmt); printf("%d:%s:%d:stmt:%p:%p\n", my_tid(), __FILE__, __LINE__, trx->sp_level, trx->stmt);
...@@ -2029,7 +2073,7 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) { ...@@ -2029,7 +2073,7 @@ int ha_tokudb::external_lock(THD * thd, int lock_type) {
} }
} }
} }
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
...@@ -2055,7 +2099,7 @@ int ha_tokudb::start_stmt(THD * thd, thr_lock_type lock_type) { ...@@ -2055,7 +2099,7 @@ int ha_tokudb::start_stmt(THD * thd, thr_lock_type lock_type) {
trans_register_ha(thd, FALSE, tokudb_hton); trans_register_ha(thd, FALSE, tokudb_hton);
} }
transaction = trx->stmt; transaction = trx->stmt;
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
/* /*
...@@ -2117,7 +2161,7 @@ static int create_sub_table(const char *table_name, const char *sub_name, DBTYPE ...@@ -2117,7 +2161,7 @@ static int create_sub_table(const char *table_name, const char *sub_name, DBTYPE
} }
if (error) if (error)
my_errno = error; my_errno = error;
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
static int mkdirpath(char *name, mode_t mode) { static int mkdirpath(char *name, mode_t mode) {
...@@ -2178,7 +2222,7 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in ...@@ -2178,7 +2222,7 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in
make_name(newname, name, 0); make_name(newname, name, 0);
error = mkdirpath(newname, 0777); error = mkdirpath(newname, 0777);
if (error != 0) { if (error != 0) {
DBUG_RETURN(errno); TOKUDB_DBUG_RETURN(errno);
} }
// QQQ rmall if the create fails // QQQ rmall if the create fails
...@@ -2188,7 +2232,7 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in ...@@ -2188,7 +2232,7 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in
/* Create the main table that will hold the real rows */ /* Create the main table that will hold the real rows */
if ((error = create_sub_table(name_buff, "main", DB_BTREE, 0))) if ((error = create_sub_table(name_buff, "main", DB_BTREE, 0)))
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
primary_key = form->s->primary_key; primary_key = form->s->primary_key;
...@@ -2201,7 +2245,7 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in ...@@ -2201,7 +2245,7 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in
make_name(newname, name, part); make_name(newname, name, part);
fn_format(name_buff, newname, "", 0, MY_UNPACK_FILENAME); fn_format(name_buff, newname, "", 0, MY_UNPACK_FILENAME);
if ((error = create_sub_table(name_buff, part, DB_BTREE, (form->key_info[i].flags & HA_NOSAME) ? 0 : DB_DUP + DB_DUPSORT))) if ((error = create_sub_table(name_buff, part, DB_BTREE, (form->key_info[i].flags & HA_NOSAME) ? 0 : DB_DUP + DB_DUPSORT)))
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
} }
...@@ -2222,7 +2266,7 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in ...@@ -2222,7 +2266,7 @@ int ha_tokudb::create(const char *name, TABLE * form, HA_CREATE_INFO * create_in
status_block->close(status_block, 0); status_block->close(status_block, 0);
} }
} }
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
...@@ -2257,7 +2301,7 @@ int ha_tokudb::delete_table(const char *name) { ...@@ -2257,7 +2301,7 @@ int ha_tokudb::delete_table(const char *name) {
error = rmall(newname); error = rmall(newname);
my_errno = error; my_errno = error;
#endif #endif
DBUG_RETURN(error); TOKUDB_DBUG_RETURN(error);
} }
...@@ -2316,7 +2360,7 @@ ha_rows ha_tokudb::records_in_range(uint keynr, key_range * start_key, key_range ...@@ -2316,7 +2360,7 @@ ha_rows ha_tokudb::records_in_range(uint keynr, key_range * start_key, key_range
if (error) { if (error) {
key_info->handler.bdb_return_if_eq = 0; key_info->handler.bdb_return_if_eq = 0;
// Better than returning an error // Better than returning an error
DBUG_RETURN(HA_TOKUDB_RANGE_COUNT); TOKUDB_DBUG_RETURN(HA_TOKUDB_RANGE_COUNT);
} }
assert(0); assert(0);
key_info->handler.bdb_return_if_eq = 1; key_info->handler.bdb_return_if_eq = 1;
...@@ -2324,7 +2368,7 @@ ha_rows ha_tokudb::records_in_range(uint keynr, key_range * start_key, key_range ...@@ -2324,7 +2368,7 @@ ha_rows ha_tokudb::records_in_range(uint keynr, key_range * start_key, key_range
key_info->handler.bdb_return_if_eq = 0; key_info->handler.bdb_return_if_eq = 0;
if (error) { if (error) {
// Better than returning an error // Better than returning an error
DBUG_RETURN(HA_TOKUDB_RANGE_COUNT); TOKUDB_DBUG_RETURN(HA_TOKUDB_RANGE_COUNT);
} }
if (!start_key) if (!start_key)
...@@ -2342,9 +2386,9 @@ ha_rows ha_tokudb::records_in_range(uint keynr, key_range * start_key, key_range ...@@ -2342,9 +2386,9 @@ ha_rows ha_tokudb::records_in_range(uint keynr, key_range * start_key, key_range
end_pos = end_range.less + end_range.equal; end_pos = end_range.less + end_range.equal;
rows = (end_pos - start_pos) * stats.records; rows = (end_pos - start_pos) * stats.records;
DBUG_PRINT("exit", ("rows: %g", rows)); DBUG_PRINT("exit", ("rows: %g", rows));
DBUG_RETURN((ha_rows) (rows <= 1.0 ? 1 : rows)); TOKUDB_DBUG_RETURN((ha_rows) (rows <= 1.0 ? 1 : rows));
#else #else
DBUG_RETURN(HA_TOKUDB_RANGE_COUNT); TOKUDB_DBUG_RETURN(HA_TOKUDB_RANGE_COUNT);
#endif #endif
} }
...@@ -2426,7 +2470,7 @@ int ha_tokudb::optimize(THD * thd, HA_CHECK_OPT * check_opt) { ...@@ -2426,7 +2470,7 @@ int ha_tokudb::optimize(THD * thd, HA_CHECK_OPT * check_opt) {
#if 0 // QQQ use default #if 0 // QQQ use default
int ha_tokudb::check(THD * thd, HA_CHECK_OPT * check_opt) { int ha_tokudb::check(THD * thd, HA_CHECK_OPT * check_opt) {
DBUG_ENTER("ha_tokudb::check"); DBUG_ENTER("ha_tokudb::check");
DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED); TOKUDB_DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
// look in old_ha_tokudb.cc for a start of an implementation // look in old_ha_tokudb.cc for a start of an implementation
} }
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment