1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-9114: Bulk operations (Array binding)

(+ default values)
This commit is contained in:
Oleksandr Byelkin
2016-06-29 20:03:06 +02:00
parent c6713f651f
commit e2d6912609
19 changed files with 619 additions and 176 deletions

View File

@@ -320,7 +320,7 @@ Sql_condition::set_sqlstate(const char* sqlstate)
}
Diagnostics_area::Diagnostics_area(bool initialize)
: m_main_wi(0, false, initialize)
: is_bulk_execution(0), m_main_wi(0, false, initialize)
{
push_warning_info(&m_main_wi);
@@ -330,7 +330,8 @@ Diagnostics_area::Diagnostics_area(bool initialize)
Diagnostics_area::Diagnostics_area(ulonglong warning_info_id,
bool allow_unlimited_warnings,
bool initialize)
: m_main_wi(warning_info_id, allow_unlimited_warnings, initialize)
: is_bulk_execution(0),
m_main_wi(warning_info_id, allow_unlimited_warnings, initialize)
{
push_warning_info(&m_main_wi);
@@ -376,22 +377,33 @@ Diagnostics_area::set_ok_status(ulonglong affected_rows,
const char *message)
{
DBUG_ENTER("set_ok_status");
DBUG_ASSERT(! is_set());
DBUG_ASSERT(!is_set() || (m_status == DA_OK_BULK && is_bulk_op()));
/*
In production, refuse to overwrite an error or a custom response
with an OK packet.
*/
if (is_error() || is_disabled())
return;
m_statement_warn_count= current_statement_warn_count();
m_affected_rows= affected_rows;
/*
When running a bulk operation, m_status will be DA_OK for the first
operation and set to DA_OK_BULK for all following operations.
*/
if (m_status == DA_OK_BULK)
{
m_statement_warn_count+= current_statement_warn_count();
m_affected_rows+= affected_rows;
}
else
{
m_statement_warn_count= current_statement_warn_count();
m_affected_rows= affected_rows;
m_status= (is_bulk_op() ? DA_OK_BULK : DA_OK);
}
m_last_insert_id= last_insert_id;
if (message)
strmake_buf(m_message, message);
else
m_message[0]= '\0';
m_status= DA_OK;
DBUG_VOID_RETURN;
}