1 /* Copyright (c) 2008 MySQL AB, 2009 Sun Microsystems, Inc. 2 Use is subject to license terms. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; version 2 of the License. 7 8 This program is distributed in the hope that it will be useful, 9 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 GNU General Public License for more details. 12 13 You should have received a copy of the GNU General Public License 14 along with this program; if not, write to the Free Software 15 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ 16 17 #ifndef SQL_SIGNAL_H 18 #define SQL_SIGNAL_H 19 20 /** 21 Sql_cmd_common_signal represents the common properties of the 22 SIGNAL and RESIGNAL statements. 23 */ 24 class Sql_cmd_common_signal : public Sql_cmd 25 { 26 protected: 27 /** 28 Constructor. 29 @param cond the condition signaled if any, or NULL. 30 @param set collection of signal condition item assignments. 31 */ Sql_cmd_common_signal(const sp_condition_value * cond,const Set_signal_information & set)32 Sql_cmd_common_signal(const sp_condition_value *cond, 33 const Set_signal_information& set) 34 : Sql_cmd(), 35 m_cond(cond), 36 m_set_signal_information(set) 37 {} 38 ~Sql_cmd_common_signal()39 virtual ~Sql_cmd_common_signal() 40 {} 41 42 /** 43 Evaluate each signal condition items for this statement. 44 @param thd the current thread. 45 @param cond the condition to update. 46 @return 0 on success. 47 */ 48 int eval_signal_informations(THD *thd, Sql_condition *cond); 49 50 /** 51 Raise a SQL condition. 52 @param thd the current thread. 53 @param cond the condition to raise. 54 @return false on success. 55 */ 56 bool raise_condition(THD *thd, Sql_condition *cond); 57 58 /** 59 The condition to signal or resignal. 60 This member is optional and can be NULL (RESIGNAL). 61 */ 62 const sp_condition_value *m_cond; 63 64 /** 65 Collection of 'SET item = value' assignments in the 66 SIGNAL/RESIGNAL statement. 67 */ 68 Set_signal_information m_set_signal_information; 69 }; 70 71 /** 72 Sql_cmd_signal represents a SIGNAL statement. 73 */ 74 class Sql_cmd_signal : public Sql_cmd_common_signal 75 { 76 public: 77 /** 78 Constructor, used to represent a SIGNAL statement. 79 @param cond the SQL condition to signal (required). 80 @param set the collection of signal informations to signal. 81 */ Sql_cmd_signal(const sp_condition_value * cond,const Set_signal_information & set)82 Sql_cmd_signal(const sp_condition_value *cond, 83 const Set_signal_information& set) 84 : Sql_cmd_common_signal(cond, set) 85 {} 86 ~Sql_cmd_signal()87 virtual ~Sql_cmd_signal() 88 {} 89 sql_command_code()90 virtual enum_sql_command sql_command_code() const 91 { 92 return SQLCOM_SIGNAL; 93 } 94 95 virtual bool execute(THD *thd); 96 }; 97 98 /** 99 Sql_cmd_resignal represents a RESIGNAL statement. 100 */ 101 class Sql_cmd_resignal : public Sql_cmd_common_signal 102 { 103 public: 104 /** 105 Constructor, used to represent a RESIGNAL statement. 106 @param cond the SQL condition to resignal (optional, may be NULL). 107 @param set the collection of signal informations to resignal. 108 */ Sql_cmd_resignal(const sp_condition_value * cond,const Set_signal_information & set)109 Sql_cmd_resignal(const sp_condition_value *cond, 110 const Set_signal_information& set) 111 : Sql_cmd_common_signal(cond, set) 112 {} 113 ~Sql_cmd_resignal()114 virtual ~Sql_cmd_resignal() 115 {} 116 sql_command_code()117 virtual enum_sql_command sql_command_code() const 118 { 119 return SQLCOM_RESIGNAL; 120 } 121 122 virtual bool execute(THD *thd); 123 }; 124 125 #endif 126 127