mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
refs #5725 support SBR and mixed logging. remove the tokudb_enable_fast_update/upsert variables
git-svn-id: file:///svn/mysql/tokudb-engine/tokudb-engine@52231 c7de825b-a66e-492c-adef-691d508d4ae1
This commit is contained in:
parent
2401724107
commit
72885f475c
2 changed files with 14 additions and 49 deletions
|
@ -157,7 +157,6 @@ static uint32_t blob_field_index(TABLE *table, KEY_AND_COL_INFO *kc_info, uint i
|
|||
// Otherwise, an error is returned.
|
||||
int ha_tokudb::fast_update(THD *thd, List<Item> &update_fields, List<Item> &update_values, Item *conds) {
|
||||
TOKUDB_DBUG_ENTER("ha_tokudb::fast_update");
|
||||
|
||||
int error = 0;
|
||||
unsigned line = 0; // debug
|
||||
|
||||
|
@ -285,7 +284,7 @@ static bool check_decr_floor_expression(Field *lhs_field, Item *item) {
|
|||
}
|
||||
|
||||
// Check if lhs = rhs expression is simple. Return true if it is.
|
||||
static bool check_simple_update_expression(Item *lhs_item, Item *rhs_item, TABLE *table) {
|
||||
static bool check_update_expression(Item *lhs_item, Item *rhs_item, TABLE *table) {
|
||||
Field *lhs_field = find_field_by_name(table, lhs_item);
|
||||
if (lhs_field == NULL)
|
||||
return false;
|
||||
|
@ -335,7 +334,7 @@ static bool check_all_update_expressions(List<Item> &fields, List<Item> &values,
|
|||
Item *rhs_item = rhs_i++;
|
||||
if (rhs_item == NULL)
|
||||
assert(0); // can not happen
|
||||
if (!check_simple_update_expression(lhs_item, rhs_item, table))
|
||||
if (!check_update_expression(lhs_item, rhs_item, table))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -458,10 +457,6 @@ static bool is_strict_mode(THD *thd) {
|
|||
|
||||
// Check if an update operation can be handled by this storage engine. Return true if it can.
|
||||
bool ha_tokudb::check_fast_update(THD *thd, List<Item> &fields, List<Item> &values, Item *conds) {
|
||||
// fast updates disabled
|
||||
if (!get_enable_fast_update(thd))
|
||||
return false;
|
||||
|
||||
if (!transaction)
|
||||
return false;
|
||||
|
||||
|
@ -474,7 +469,8 @@ bool ha_tokudb::check_fast_update(THD *thd, List<Item> &fields, List<Item> &valu
|
|||
return false;
|
||||
|
||||
// no binlog
|
||||
if (mysql_bin_log.is_open())
|
||||
if (mysql_bin_log.is_open() &&
|
||||
!(thd->variables.binlog_format == BINLOG_FORMAT_STMT || thd->variables.binlog_format == BINLOG_FORMAT_MIXED))
|
||||
return false;
|
||||
|
||||
// no clustering keys (need to broadcast an increment into the clustering keys since we are selecting with the primary key)
|
||||
|
@ -513,7 +509,7 @@ static void marshall_blobs_descriptor(tokudb::buffer &b, TABLE *table, KEY_AND_C
|
|||
static inline uint32_t get_null_bit_position(uint32_t null_bit);
|
||||
|
||||
// Marshall update operatins to a buffer.
|
||||
static void marshall_simple_update(tokudb::buffer &b, Item *lhs_item, Item *rhs_item, TABLE *table, TOKUDB_SHARE *share) {
|
||||
static void marshall_update(tokudb::buffer &b, Item *lhs_item, Item *rhs_item, TABLE *table, TOKUDB_SHARE *share) {
|
||||
// figure out the update operation type (again)
|
||||
Field *lhs_field = find_field_by_name(table, lhs_item);
|
||||
assert(lhs_field); // we found it before, so this should work
|
||||
|
@ -685,9 +681,7 @@ int ha_tokudb::send_update_message(List<Item> &update_fields, List<Item> &update
|
|||
// construct the update message
|
||||
tokudb::buffer update_message;
|
||||
|
||||
// update_message.append_uint32(UPDATE_OP_UPDATE_2);
|
||||
uint8_t operation = UPDATE_OP_UPDATE_2;
|
||||
update_message.append(&operation, sizeof operation);
|
||||
update_message.append_uint32(UPDATE_OP_UPDATE_2);
|
||||
|
||||
uint32_t num_updates = update_fields.elements;
|
||||
uint num_varchars = 0, num_blobs = 0;
|
||||
|
@ -724,7 +718,7 @@ int ha_tokudb::send_update_message(List<Item> &update_fields, List<Item> &update
|
|||
Item *rhs_item = rhs_i++;
|
||||
if (rhs_item == NULL)
|
||||
assert(0); // can not happen
|
||||
marshall_simple_update(update_message, lhs_item, rhs_item, table, share);
|
||||
marshall_update(update_message, lhs_item, rhs_item, table, share);
|
||||
}
|
||||
|
||||
rw_rdlock(&share->num_DBs_lock);
|
||||
|
@ -792,10 +786,6 @@ return_error:
|
|||
|
||||
// Check if an upsert can be handled by this storage engine. Return trus if it can.
|
||||
bool ha_tokudb::check_upsert(THD *thd, List<Item> &update_fields, List<Item> &update_values) {
|
||||
// fast upserts disabled
|
||||
if (!get_enable_fast_upsert(thd))
|
||||
return false;
|
||||
|
||||
if (!transaction)
|
||||
return false;
|
||||
|
||||
|
@ -806,10 +796,6 @@ bool ha_tokudb::check_upsert(THD *thd, List<Item> &update_fields, List<Item> &up
|
|||
// no triggers
|
||||
if (table->triggers)
|
||||
return false;
|
||||
|
||||
// no binlog
|
||||
if (mysql_bin_log.is_open())
|
||||
return false;
|
||||
|
||||
// primary key must exist
|
||||
if (table->s->primary_key >= table->s->keys)
|
||||
|
@ -819,6 +805,11 @@ bool ha_tokudb::check_upsert(THD *thd, List<Item> &update_fields, List<Item> &up
|
|||
if (table->s->keys > 1)
|
||||
return false;
|
||||
|
||||
// no binlog
|
||||
if (mysql_bin_log.is_open() &&
|
||||
!(thd->variables.binlog_format == BINLOG_FORMAT_STMT || thd->variables.binlog_format == BINLOG_FORMAT_MIXED))
|
||||
return false;
|
||||
|
||||
if (!check_all_update_expressions(update_fields, update_values, table))
|
||||
return false;
|
||||
|
||||
|
@ -843,9 +834,7 @@ int ha_tokudb::send_upsert_message(THD *thd, List<Item> &update_fields, List<Ite
|
|||
tokudb::buffer update_message;
|
||||
|
||||
// append the operation
|
||||
// update_message.append_uint32(UPDATE_OP_UPSERT_2);
|
||||
uint8_t operation = UPDATE_OP_UPSERT_2;
|
||||
update_message.append(&operation, sizeof operation);
|
||||
update_message.append_uint32(UPDATE_OP_UPSERT_2);
|
||||
|
||||
// append the row
|
||||
update_message.append_uint32(row.size);
|
||||
|
@ -886,7 +875,7 @@ int ha_tokudb::send_upsert_message(THD *thd, List<Item> &update_fields, List<Ite
|
|||
Item *rhs_item = rhs_i++;
|
||||
if (rhs_item == NULL)
|
||||
assert(0); // can not happen
|
||||
marshall_simple_update(update_message, lhs_item, rhs_item, table, share);
|
||||
marshall_update(update_message, lhs_item, rhs_item, table, share);
|
||||
}
|
||||
|
||||
rw_rdlock(&share->num_DBs_lock);
|
||||
|
|
|
@ -140,13 +140,6 @@ static MYSQL_THDVAR_UINT(read_buf_size,
|
|||
1 // blocksize???
|
||||
);
|
||||
#if TOKU_INCLUDE_UPSERT
|
||||
static MYSQL_THDVAR_BOOL(enable_fast_update,
|
||||
PLUGIN_VAR_THDLOCAL,
|
||||
"enable fast update",
|
||||
NULL, // check
|
||||
NULL, // update
|
||||
true // default
|
||||
);
|
||||
static MYSQL_THDVAR_BOOL(disable_slow_update,
|
||||
PLUGIN_VAR_THDLOCAL,
|
||||
"disable slow update",
|
||||
|
@ -154,13 +147,6 @@ static MYSQL_THDVAR_BOOL(disable_slow_update,
|
|||
NULL, // update
|
||||
false // default
|
||||
);
|
||||
static MYSQL_THDVAR_BOOL(enable_fast_upsert,
|
||||
PLUGIN_VAR_THDLOCAL,
|
||||
"enable fast upsert",
|
||||
NULL, // check
|
||||
NULL, // update
|
||||
true // default
|
||||
);
|
||||
static MYSQL_THDVAR_BOOL(disable_slow_upsert,
|
||||
PLUGIN_VAR_THDLOCAL,
|
||||
"disable slow upsert",
|
||||
|
@ -745,18 +731,10 @@ uint get_tokudb_read_buf_size(THD* thd) {
|
|||
}
|
||||
|
||||
#if TOKU_INCLUDE_UPSERT
|
||||
bool get_enable_fast_update(THD* thd) {
|
||||
return (THDVAR(thd, enable_fast_update) != 0);
|
||||
}
|
||||
|
||||
bool get_disable_slow_update(THD* thd) {
|
||||
return (THDVAR(thd, disable_slow_update) != 0);
|
||||
}
|
||||
|
||||
bool get_enable_fast_upsert(THD* thd) {
|
||||
return (THDVAR(thd, enable_fast_upsert) != 0);
|
||||
}
|
||||
|
||||
bool get_disable_slow_upsert(THD* thd) {
|
||||
return (THDVAR(thd, disable_slow_upsert) != 0);
|
||||
}
|
||||
|
@ -1958,9 +1936,7 @@ static struct st_mysql_sys_var *tokudb_system_variables[] = {
|
|||
MYSQL_SYSVAR(read_buf_size),
|
||||
MYSQL_SYSVAR(row_format),
|
||||
#if TOKU_INCLUDE_UPSERT
|
||||
MYSQL_SYSVAR(enable_fast_update),
|
||||
MYSQL_SYSVAR(disable_slow_update),
|
||||
MYSQL_SYSVAR(enable_fast_upsert),
|
||||
MYSQL_SYSVAR(disable_slow_upsert),
|
||||
#endif
|
||||
NULL
|
||||
|
|
Loading…
Reference in a new issue