Commit 5b1eb87b authored by Marko Mäkelä's avatar Marko Mäkelä

Merge 10.7 into 10.8

parents f46efb44 7f6ddce7
......@@ -525,15 +525,7 @@ class trx_mod_table_time_t
/** Do bulk insert operation present in the buffered operation
@return DB_SUCCESS or error code */
dberr_t write_bulk(dict_table_t *table, trx_t *trx)
{
if (!bulk_store)
return DB_SUCCESS;
dberr_t err= bulk_store->write_to_table(table, trx);
delete bulk_store;
bulk_store= nullptr;
return err;
}
dberr_t write_bulk(dict_table_t *table, trx_t *trx);
/** @return whether the buffer storage exist */
bool bulk_buffer_exist() const
......@@ -1171,42 +1163,18 @@ struct trx_t : ilist_node<>
return &it->second;
}
/** Rollback all bulk insert operations */
void bulk_rollback()
{
undo_no_t low_limit= UINT64_MAX;
for (auto& t : mod_tables)
{
if (!t.second.is_bulk_insert())
continue;
if (t.second.get_first() < low_limit)
low_limit= t.second.get_first();
}
trx_savept_t bulk_save{low_limit};
rollback(&bulk_save);
}
/** Do the bulk insert for the buffered insert operation
for the transaction.
@return DB_SUCCESS or error code */
dberr_t bulk_insert_apply()
{
if (UNIV_LIKELY(!bulk_insert))
return DB_SUCCESS;
ut_ad(!check_unique_secondary);
ut_ad(!check_foreigns);
for (auto& t : mod_tables)
if (t.second.is_bulk_insert())
if (dberr_t err= t.second.write_bulk(t.first, this))
{
bulk_rollback();
return err;
}
return DB_SUCCESS;
return UNIV_UNLIKELY(bulk_insert) ? bulk_insert_apply_low(): DB_SUCCESS;
}
private:
/** Apply the buffered bulk inserts. */
dberr_t bulk_insert_apply_low();
/** Assign a rollback segment for modifying temporary tables.
@return the assigned rollback segment */
trx_rseg_t *assign_temp_rseg();
......
......@@ -5362,3 +5362,40 @@ dberr_t row_merge_bulk_t::write_to_table(dict_table_t *table, trx_t *trx)
return DB_SUCCESS;
}
dberr_t trx_mod_table_time_t::write_bulk(dict_table_t *table, trx_t *trx)
{
if (!bulk_store)
return DB_SUCCESS;
dberr_t err= bulk_store->write_to_table(table, trx);
delete bulk_store;
bulk_store= nullptr;
return err;
}
dberr_t trx_t::bulk_insert_apply_low()
{
ut_ad(bulk_insert);
ut_ad(!check_unique_secondary);
ut_ad(!check_foreigns);
dberr_t err;
for (auto& t : mod_tables)
if (t.second.is_bulk_insert())
if ((err= t.second.write_bulk(t.first, this)) != DB_SUCCESS)
goto bulk_rollback;
return DB_SUCCESS;
bulk_rollback:
undo_no_t low_limit= UINT64_MAX;
for (auto& t : mod_tables)
{
if (t.second.is_bulk_insert())
{
if (t.second.get_first() < low_limit)
low_limit= t.second.get_first();
delete t.second.bulk_store;
}
}
trx_savept_t bulk_save{low_limit};
rollback(&bulk_save);
return err;
}
......@@ -118,7 +118,7 @@ uchar *spider_conn_get_key(
DBUG_ENTER("spider_conn_get_key");
*length = conn->conn_key_length;
DBUG_PRINT("info",("spider conn_kind=%u", conn->conn_kind));
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
spider_print_keys(conn->conn_key, conn->conn_key_length);
#endif
DBUG_RETURN((uchar*) conn->conn_key);
......@@ -736,7 +736,7 @@ SPIDER_CONN *spider_get_conn(
DBUG_PRINT("info",("spider link_idx=%u", link_idx));
DBUG_PRINT("info",("spider base_link_idx=%u", base_link_idx));
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
spider_print_keys(conn_key, share->conn_keys_lengths[link_idx]);
#endif
#ifdef SPIDER_HAS_HASH_VALUE_TYPE
......
......@@ -912,7 +912,7 @@ int spider_db_mbase_result::fetch_table_status(
#endif
} else
stat.create_time = (time_t) 0;
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
{
struct tm *ts, tmp_ts;
char buf[80];
......@@ -962,7 +962,7 @@ int spider_db_mbase_result::fetch_table_status(
#endif
} else
stat.check_time = (time_t) 0;
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
{
struct tm *ts, tmp_ts;
char buf[80];
......@@ -1041,7 +1041,7 @@ int spider_db_mbase_result::fetch_table_status(
#endif
} else
stat.create_time = (time_t) 0;
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
{
struct tm *ts, tmp_ts;
char buf[80];
......@@ -1066,7 +1066,7 @@ int spider_db_mbase_result::fetch_table_status(
#endif
} else
stat.update_time = (time_t) 0;
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
{
struct tm *ts, tmp_ts;
char buf[80];
......@@ -1091,7 +1091,7 @@ int spider_db_mbase_result::fetch_table_status(
#endif
} else
stat.check_time = (time_t) 0;
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
{
struct tm *ts, tmp_ts;
char buf[80];
......@@ -4122,7 +4122,7 @@ int spider_db_mariadb_util::append_column_value(ha_spider *spider,
ptr = tmp_str.get_str();
} else if (field->type() == MYSQL_TYPE_GEOMETRY)
{
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
double xmin, xmax, ymin, ymax;
float8get(xmin, new_ptr);
float8get(xmax, new_ptr + 8);
......@@ -4279,7 +4279,7 @@ int spider_db_mysql_util::append_column_value(
}
tmp_str.length(SIZEOF_STORED_DOUBLE * lcnt);
*/
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
double xmin, xmax, ymin, ymax;
/*
float8store(buf,xmin);
......
......@@ -195,13 +195,13 @@ class spider_db_mbase_util: public spider_db_util
spider_string *str
) override;
#endif
bool tables_on_different_db_are_joinable();
bool socket_has_default_value();
bool database_has_default_value();
bool default_file_has_default_value();
bool host_has_default_value();
bool port_has_default_value();
bool append_charset_name_before_string();
bool tables_on_different_db_are_joinable() override;
bool socket_has_default_value() override;
bool database_has_default_value() override;
bool default_file_has_default_value() override;
bool host_has_default_value() override;
bool port_has_default_value() override;
bool append_charset_name_before_string() override;
};
class spider_db_mysql_util: public spider_db_mbase_util
......
......@@ -4247,7 +4247,7 @@ int spider_set_connect_info_default_dbtable(
));
}
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
void spider_print_keys(
const char *key,
uint length
......
......@@ -431,7 +431,7 @@ int spider_set_connect_info_default_dbtable(
int dbtable_name_length
);
#ifndef DBUG_OFF
#ifdef DBUG_TRACE
void spider_print_keys(
const char *key,
uint length
......
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