diff options
author | Rucha Deodhar <rucha.deodhar@mariadb.com> | 2021-07-31 12:55:21 +0530 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2021-09-15 08:55:34 +0200 |
commit | ea06c67a49cf6f4b8daa7287454faba6b7cae874 (patch) | |
tree | 5ca3baa1ed755803a16c43d36b10fe2896b22fbe /sql/sql_error.h | |
parent | 50e08f3da00bbc800de7eec278ad98cf0acd0845 (diff) | |
download | mariadb-git-ea06c67a49cf6f4b8daa7287454faba6b7cae874.tar.gz |
MDEV-10075: Provide index of error causing error in array INSERT
Extended the parser for GET DIAGNOSTICS to use ERROR_INDEX to get
warning/error index.
Error information is stored in Sql_condition. So it can be used to
store the index of warning/error too. THD::current_insert_index keeps a
track of count for each row that is processed or going to be inserted in the
table (or first row in case of prepare phase). When an error occurs,
first we need to fetch corrected error index (using correct_error_index())
for an error number. This is needed because in prepare phase, the error
may not be because of rows/values. In such case, correct value of
error_index should be 0. Once correct value if fetched, assign it to
Sql_condition::error_index when the object is created during error/warning.
This error_index variable is returned when ERROR_INDEX is used in
GET DIAGNOSTICS.
Diffstat (limited to 'sql/sql_error.h')
-rw-r--r-- | sql/sql_error.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sql/sql_error.h b/sql/sql_error.h index 6b0d4d7749c..113b51454c6 100644 --- a/sql/sql_error.h +++ b/sql/sql_error.h @@ -396,7 +396,7 @@ private: */ Sql_condition() :m_mem_root(NULL) - { } + { error_index= 0; } /** Complete the Sql_condition initialisation. @@ -419,6 +419,7 @@ private: :m_mem_root(mem_root) { DBUG_ASSERT(mem_root != NULL); + error_index= 0; } Sql_condition(MEM_ROOT *mem_root, const Sql_user_condition_identity &ucid) @@ -426,6 +427,7 @@ private: m_mem_root(mem_root) { DBUG_ASSERT(mem_root != NULL); + error_index= 0; } /** Constructor for a fixed message text. @@ -436,7 +438,8 @@ private: */ Sql_condition(MEM_ROOT *mem_root, const Sql_condition_identity &value, - const char *msg) + const char *msg, + ulonglong current_error_index) :Sql_condition_identity(value), m_mem_root(mem_root) { @@ -444,6 +447,7 @@ private: DBUG_ASSERT(value.get_sql_errno() != 0); DBUG_ASSERT(msg != NULL); set_builtin_message_text(msg); + error_index= current_error_index; } /** Destructor. */ @@ -497,6 +501,9 @@ private: /** Memory root to use to hold condition item values. */ MEM_ROOT *m_mem_root; + + /* Index of error for INSERT/REPLACE statement. */ + ulonglong error_index; }; /////////////////////////////////////////////////////////////////////////// |