Skip to content
Permalink
Browse files
Merge 10.7 into 10.8
  • Loading branch information
dr-m committed Nov 21, 2022
2 parents f46efb4 + 7f6ddce commit 5b1eb87
Show file tree
Hide file tree
Showing 7 changed files with 60 additions and 55 deletions.
@@ -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

0 comments on commit 5b1eb87

Please sign in to comment.