summaryrefslogtreecommitdiff
path: root/sql/sql_error.cc
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2016-06-29 20:03:06 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2016-11-02 15:07:52 +0100
commite2d6912609c976bad04cee76874d4f986cd58cef (patch)
treef59d435e68c97fb717cb0bfdada8fced24455dc6 /sql/sql_error.cc
parentc6713f651f5a50709273d14ce5732f7ef3409737 (diff)
downloadmariadb-git-e2d6912609c976bad04cee76874d4f986cd58cef.tar.gz
MDEV-9114: Bulk operations (Array binding)
(+ default values)
Diffstat (limited to 'sql/sql_error.cc')
-rw-r--r--sql/sql_error.cc26
1 files changed, 19 insertions, 7 deletions
diff --git a/sql/sql_error.cc b/sql/sql_error.cc
index 1d234c578e3..d14c7b83b77 100644
--- a/sql/sql_error.cc
+++ b/sql/sql_error.cc
@@ -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;
}