00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #pragma once
00033
00034 #include <drizzled/error_t.h>
00035
00036 #include <queue>
00037 #include <stdexcept>
00038
00039 namespace drizzled {
00040 namespace sql {
00041
00042 class Exception : public std::runtime_error
00043 {
00044 public:
00045 Exception(std::string reason, std::string sql_state, drizzled::error_t error_arg) :
00046 std::runtime_error(reason),
00047 _error_code(error_arg),
00048 _sql_state(sql_state),
00049 _reason(reason)
00050 {
00051 if (_sql_state.length() != 5)
00052 _sql_state= "HY000";
00053 }
00054
00055 Exception() :
00056 std::runtime_error("no error"),
00057 _error_code(drizzled::EE_OK),
00058 _sql_state("00000")
00059 {
00060 }
00061
00062 Exception(std::string reason, drizzled::error_t error_arg) :
00063 std::runtime_error(reason),
00064 _error_code(error_arg),
00065 _reason(reason)
00066 {
00067 _sql_state= "00000";
00068 }
00069
00070 ~Exception () throw ()
00071 { }
00072
00073 drizzled::error_t getErrorCode() const
00074 {
00075 return _error_code;
00076 }
00077
00078 const std::string &getErrorMessage() const
00079 {
00080 return _reason;
00081 }
00082
00083 Exception getNextException() const
00084 {
00085 if (_next_exception.empty())
00086 {
00087 return Exception();
00088 }
00089
00090 Exception tmp= _next_exception.front();
00091 _next_exception.pop();
00092
00093 return Exception();
00094 }
00095
00096 const std::string &getSQLState() const
00097 {
00098 return _sql_state;
00099 }
00100
00101 protected:
00102 friend class ResultSet;
00103 void setNextException(Exception arg)
00104 {
00105 (void)arg;
00106 return;
00107 }
00108
00109 private:
00110 drizzled::error_t _error_code;
00111 std::string _sql_state;
00112 std::string _reason;
00113 mutable std::queue <Exception> _next_exception;
00114 };
00115
00116 std::ostream& operator<<(std::ostream& output, const Exception &arg);
00117
00118 }
00119 }
00120