summaryrefslogtreecommitdiff
path: root/sql/sql_error.h
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2016-10-13 18:19:58 +0400
committerAlexander Barkov <bar@mariadb.org>2017-04-05 15:02:53 +0400
commit4d3818d30d97e6fbdb5130d73716401e883c7371 (patch)
treef2440171d9faa1c804b5df73f542c17e4a7e755b /sql/sql_error.h
parent6010662cb328c10b1ef92c3ed43b2b3858c49863 (diff)
downloadmariadb-git-4d3818d30d97e6fbdb5130d73716401e883c7371.tar.gz
MDEV-11037 Diagnostics_area refactoring for user defined exceptions
Part 2: Moving the part of Sql_condition that contain condition items (such as m_class_origin, m_cursor_name, etc) into a separate class Sql_condition_items. This allows to remove duplicate code in different Sql_condition constructors. Also, introducing new Sql_condition constructors and removing the method Sql_condition::set(). All code sequences that called an Sql_condition constructor followed by Sql_condition::set() are now replaced to the new constructor calls. This gives light performance improvement, as the relevant members are now initialized only one time.
Diffstat (limited to 'sql/sql_error.h')
-rw-r--r--sql/sql_error.h186
1 files changed, 129 insertions, 57 deletions
diff --git a/sql/sql_error.h b/sql/sql_error.h
index 1fe6d6f1699..d80ce218769 100644
--- a/sql/sql_error.h
+++ b/sql/sql_error.h
@@ -139,6 +139,10 @@ public:
{
*this= *other;
}
+ void clear()
+ {
+ m_sql_errno= 0;
+ }
};
@@ -177,6 +181,78 @@ public:
:Sql_state_errno(sqlerrno, sqlstate),
m_level(level)
{ }
+ Sql_state_errno_level(const Sql_state_errno &state_errno,
+ enum_warning_level level)
+ :Sql_state_errno(state_errno),
+ m_level(level)
+ { }
+ void clear()
+ {
+ m_level= WARN_LEVEL_ERROR;
+ Sql_state_errno::clear();
+ }
+};
+
+
+class Sql_condition_items
+{
+protected:
+ /** SQL CLASS_ORIGIN condition item. */
+ String m_class_origin;
+
+ /** SQL SUBCLASS_ORIGIN condition item. */
+ String m_subclass_origin;
+
+ /** SQL CONSTRAINT_CATALOG condition item. */
+ String m_constraint_catalog;
+
+ /** SQL CONSTRAINT_SCHEMA condition item. */
+ String m_constraint_schema;
+
+ /** SQL CONSTRAINT_NAME condition item. */
+ String m_constraint_name;
+
+ /** SQL CATALOG_NAME condition item. */
+ String m_catalog_name;
+
+ /** SQL SCHEMA_NAME condition item. */
+ String m_schema_name;
+
+ /** SQL TABLE_NAME condition item. */
+ String m_table_name;
+
+ /** SQL COLUMN_NAME condition item. */
+ String m_column_name;
+
+ /** SQL CURSOR_NAME condition item. */
+ String m_cursor_name;
+
+ Sql_condition_items()
+ :m_class_origin((const char*) NULL, 0, & my_charset_utf8_bin),
+ m_subclass_origin((const char*) NULL, 0, & my_charset_utf8_bin),
+ m_constraint_catalog((const char*) NULL, 0, & my_charset_utf8_bin),
+ m_constraint_schema((const char*) NULL, 0, & my_charset_utf8_bin),
+ m_constraint_name((const char*) NULL, 0, & my_charset_utf8_bin),
+ m_catalog_name((const char*) NULL, 0, & my_charset_utf8_bin),
+ m_schema_name((const char*) NULL, 0, & my_charset_utf8_bin),
+ m_table_name((const char*) NULL, 0, & my_charset_utf8_bin),
+ m_column_name((const char*) NULL, 0, & my_charset_utf8_bin),
+ m_cursor_name((const char*) NULL, 0, & my_charset_utf8_bin)
+ { }
+
+ void clear()
+ {
+ m_class_origin.length(0);
+ m_subclass_origin.length(0);
+ m_constraint_catalog.length(0);
+ m_constraint_schema.length(0);
+ m_constraint_name.length(0);
+ m_catalog_name.length(0);
+ m_schema_name.length(0);
+ m_table_name.length(0);
+ m_column_name.length(0);
+ m_cursor_name.length(0);
+ }
};
@@ -185,7 +261,9 @@ public:
A SQL condition can be a completion condition (note, warning),
or an exception condition (error, not found).
*/
-class Sql_condition : public Sql_alloc, public Sql_state_errno_level
+class Sql_condition : public Sql_alloc,
+ public Sql_state_errno_level,
+ public Sql_condition_items
{
public:
@@ -237,55 +315,74 @@ private:
This constructor is usefull when allocating arrays.
Note that the init() method should be called to complete the Sql_condition.
*/
- Sql_condition();
+ Sql_condition()
+ :m_mem_root(NULL)
+ { }
/**
Complete the Sql_condition initialisation.
@param mem_root The memory root to use for the condition items
of this condition
*/
- void init(MEM_ROOT *mem_root);
+ void init(MEM_ROOT *mem_root)
+ {
+ DBUG_ASSERT(mem_root != NULL);
+ DBUG_ASSERT(m_mem_root == NULL);
+ m_mem_root= mem_root;
+ }
/**
Constructor.
@param mem_root The memory root to use for the condition items
of this condition
*/
- Sql_condition(MEM_ROOT *mem_root);
-
- /** Destructor. */
- ~Sql_condition()
- {}
-
- /**
- Copy optional condition items attributes.
- @param cond the condition to copy.
- */
- void copy_opt_attributes(const Sql_condition *cond);
+ Sql_condition(MEM_ROOT *mem_root)
+ :m_mem_root(mem_root)
+ {
+ DBUG_ASSERT(mem_root != NULL);
+ }
/**
- Set this condition area with a fixed message text.
- @param value - the error number and the sql state for this condition.
- @param level - the error level for this condition.
- @param msg - the message text for this condition.
+ Constructor for a fixed message text.
+ @param mem_root - memory root
+ @param value - the error number and the sql state for this condition
+ @param level - the error level for this condition
+ @param msg - the message text for this condition
*/
- void set(const Sql_state_errno *value,
- Sql_condition::enum_warning_level level,
- const char* msg)
+ Sql_condition(MEM_ROOT *mem_root,
+ const Sql_state_errno_level *value,
+ const char *msg)
+ :Sql_state_errno_level(*value),
+ m_mem_root(mem_root)
{
+ DBUG_ASSERT(mem_root != NULL);
DBUG_ASSERT(value->get_sql_errno() != 0);
- DBUG_ASSERT(value->get_sqlstate() != NULL);
DBUG_ASSERT(msg != NULL);
- set_condition_value(value);
set_builtin_message_text(msg);
- m_level= level;
}
- void set(const Sql_state_errno_level *cond, const char* msg)
+ Sql_condition(MEM_ROOT *mem_root,
+ const Sql_state_errno *value,
+ const char *msg)
+ :Sql_state_errno_level(*value, Sql_condition::WARN_LEVEL_ERROR),
+ m_mem_root(mem_root)
{
- set(cond, cond->get_level(), msg);
+ DBUG_ASSERT(mem_root != NULL);
+ DBUG_ASSERT(value->get_sql_errno() != 0);
+ DBUG_ASSERT(msg != NULL);
+ set_builtin_message_text(msg);
}
+ /** Destructor. */
+ ~Sql_condition()
+ {}
+
+ /**
+ Copy optional condition items attributes.
+ @param cond the condition to copy.
+ */
+ void copy_opt_attributes(const Sql_condition *cond);
+
/**
Set the condition message test.
@param str Message text, expressed in the character set derived from
@@ -310,39 +407,14 @@ private:
/**
Clear this SQL condition.
*/
- void clear();
+ void clear()
+ {
+ Sql_state_errno_level::clear();
+ Sql_condition_items::clear();
+ m_message_text.length(0);
+ }
private:
- /** SQL CLASS_ORIGIN condition item. */
- String m_class_origin;
-
- /** SQL SUBCLASS_ORIGIN condition item. */
- String m_subclass_origin;
-
- /** SQL CONSTRAINT_CATALOG condition item. */
- String m_constraint_catalog;
-
- /** SQL CONSTRAINT_SCHEMA condition item. */
- String m_constraint_schema;
-
- /** SQL CONSTRAINT_NAME condition item. */
- String m_constraint_name;
-
- /** SQL CATALOG_NAME condition item. */
- String m_catalog_name;
-
- /** SQL SCHEMA_NAME condition item. */
- String m_schema_name;
-
- /** SQL TABLE_NAME condition item. */
- String m_table_name;
-
- /** SQL COLUMN_NAME condition item. */
- String m_column_name;
-
- /** SQL CURSOR_NAME condition item. */
- String m_cursor_name;
-
/** Message text, expressed in the character set implied by --language. */
String m_message_text;